2017-02-08 2 views
1

Ich implementiere eine Suchleiste, die Kunden nach Vorname, Nachname oder beides suchen kann. So würde zum Beispiel Mike Hizer von Mike angepasst werden, Hizer, zer, Mike Hizer usw. Hier ist, was ich kam mit:Eloquent WHERE LIKE-Klausel mit mehreren Spalten

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

Es funktioniert. Aber gibt es einen eloquenteren Ansatz, um diese beiden Säulen (first_name und last_name) zu kombinieren, ohne auf die DB-Fassade zurückzugreifen? Würde etwas wie

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

möglich sein, zu erreichen?

+1

Haben Sie Laravel Scout ausgecheckt? https://laravel.com/docs/5.4/scout Es bietet eine einfache, treiberbasierte Lösung zum Hinzufügen von Volltextsuche zu Ihren Eloquent-Modellen. –

+0

@Denis Priebe Ja, ich sollte mich darum kümmern, danke! – Alex

Antwort

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

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

Versuchen Sie, diese Art und Weise ..

3

Wenn Sie nicht wollen, die DB Fassade verwenden Sie die whereRaw Methode verwenden:

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

hoffe, das hilft!

+0

Schön, das ist genau der Ansatz, den ich verwendet habe. Ich habe mich nur gefragt, ob Eloquent diese Funktionalität ohne "DB" oder unformatierte Abfragen zur Verfügung stellt. Trotzdem danke – Alex

Verwandte Themen