So machen Sie es mit Query\Builder , aber zuerst einige zusätzliche Anmerkungen:
// user can provide double space by accident, or on purpose:
$string = 'john doe';
// so with explode you get this:
explode(' ', $string);
array(
0 => 'john',
1 => '',
2 => 'doe'
)
// Now if you go with LIKE '%'.value.'%', you get this:
select * from table where name like '%john%' or name like '%%' or ...
Allerdings können Sie sich natürlich nicht auf explode verlassen denn im obigen Fall würden Sie alle Zeilen erhalten.
Das sollten Sie also tun:
$string = 'john doe';
// split on 1+ whitespace & ignore empty (eg. trailing space)
$searchValues = preg_split('/\s+/', $string, -1, PREG_SPLIT_NO_EMPTY);
$users = User::where(function ($q) use ($searchValues) {
foreach ($searchValues as $value) {
$q->orWhere('name', 'like', "%{$value}%");
}
})->get();
Es gibt einen Abschluss im where weil es sich bewährt hat, or where einzuschließen Klauseln in Klammern. Zum Beispiel, wenn Ihr User verwendetes Modell SoftDeletingScope und Sie würden nicht tun, was ich vorgeschlagen habe, Ihre ganze Abfrage wäre durcheinander geraten.