2017-02-08 2 views
1

Я реализую панель поиска, которая может искать клиентов по имени, фамилии или и тем, и другим. Так, например, Mike Hizer будет сопровождаться Mike, Hizer, zer, Mike Hizer и т.д. Вот что я придумал:Eloquent WHERE LIKE предложение с несколькими столбцами

Customer::where(
    DB::raw('concat(first_name," ",last_name)'), 'like', "%{$request->search}%" 
)->get() 

Он работает. Но есть ли более красноречивый подход для объединения этих двух столбцов (first_name и last_name), не прибегая к фазе БД? Будет что-то вроде

->where(['first_name','last_name'], 'like', "%{$request->search}%") 

можно достичь?

+1

Вы проверили Laravel Scout? https://laravel.com/docs/5.4/scout Он предоставляет простое, основанное на драйверах решение для добавления полнотекстового поиска в ваши модели Eloquent. –

+0

@Denis Priebe Да, я должен изучить его, спасибо! – Alex

ответ

-1
$query = User::where('id', '=', '2'); 

$query->where('first_name', 'LIKE', "%$search%"); 
$query->or_where('last_name', 'LIKE', "%$search%"); 
$users = $query->get(); 

Попробуйте этот способ ..

3

Если вы не хотите использовать DB фасад можно использовать метод whereRaw:

Customer::whereRaw('concat(first_name," ",last_name) like ?', "%{$request->search}%")->get(); 

Надеется, что это помогает!

+0

Ницца, это именно тот подход, который я использовал. Мне просто интересно, есть ли у Eloquent эти функции из коробки, без «DB» или необработанных запросов. В любом случае спасибо – Alex

Смежные вопросы