Laravel Eloquent, где запрос с несколькими словами

У меня есть следующий запрос (сокращенно для краткости):

    $employees = Employee::where('first_name', 'LIKE', "%$query%")
                 ->orWhere('last_name', 'LIKE', "%$query%")

Теперь это работает, когда пользователь вводит одно имя, например «Джон» или «Смит», но когда он вводит «Джон Смит», он ничего не находит. Я пропустил дополнительный orWhere?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
419
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны были бы добавить 3-й orWhere. Для нашей функции поиска мы используем что-то вроде этого:

Employee::whereraw("COALESCE(last_name, '') LIKE '%$query%'")
    ->Orwhereraw("COALESCE(first_name, '') LIKE '%$query%'")
    ->Orwhereraw("COALESCE(last_name + ', ' + first_name, '') LIKE '%$query%'")

Добавление Coalesce, похоже, помогло с некоторыми проблемами, которые у нас были, когда мы впервые реализовали его, хотя не уверен, что это необходимо в вашем случае.

Ответ принят как подходящий

Попробуй это :

Employee::where(DB::raw('CONCAT(first_name," ",lastname)'), 'LIKE', "%' . $query . '%"))

Спасибо! Все работают, но этот самый короткий!

PiotrG 22.02.2019 17:03

Осторожно: ответ широко открыт для SQL-инъекций. laravel.com/docs/5.7/queries#raw-выражения

Murat Tutumlu 23.02.2019 04:55

Ты можешь сделать :

$fullName = обрезать ($ запрос);

$employees  = Employee::where(DB::raw("CONCAT(first_name, ' ', last_name)"), 'LIKE', "%".$fullName."%")->get();

Вы объединяете значения в базе данных для first_name + ' ' + last_name, а затем используете лайк, чтобы найти совпадающие записи.

Осторожно: ответ широко открыт для SQL-инъекций. laravel.com/docs/5.7/queries#raw-выражения

Murat Tutumlu 23.02.2019 04:58

@MuratTutumlu на самом деле нет, DB::raw используется в конкатенации столбцов, где не передается используемая определенная переменная. и строка запроса передается в аргументе where(), что безопасно для инъекций.

Mihir Bhende 23.02.2019 12:44

Другие вопросы по теме