これは、Query\Builder
で行う方法です。 、ただし最初にいくつかの追加の注意事項:
// 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 ...
とはいえ、明らかにexplode
に頼ることはできません。 上記の場合、すべての行を取得するためです。
だから、これはあなたがすべきことです:
$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();
where
に閉鎖があります or where
をラップすることをお勧めします 括弧内の句。たとえば、User
使用されたモデルSoftDeletingScope
そして、あなたは私が提案したことをしないでしょう、あなたの質問全体が台無しになるでしょう。