Zo doe je het met Query\Builder , maar eerst wat aanvullende opmerkingen:
// 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 ...
Dat gezegd hebbende, je kunt natuurlijk niet vertrouwen op explode omdat je in het bovenstaande geval alle rijen zou krijgen.
Dit is dus wat u moet doen:
$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();
Er is een afsluiting in de where omdat het een goede gewoonte is om uw or where clausules tussen haakjes. Bijvoorbeeld als uw User gebruikt model SoftDeletingScope en je zou niet doen wat ik voorstelde, je hele vraag zou in de war raken.