雄辩-多个WHERE LIKE条件

nam*_*ess 3 php mysql laravel eloquent laravel-eloquent

我目前正在尝试在数据库中实现关键字搜索。因此,我分割了一个用逗号分隔的字符串,从而得到了一个包含数量可变的元素(一个关键字)的数组。

我知道我可以使用一种雄辩的构造:

$products = Product::where([['keywords', 'LIKE', %samsung%], [keywords, 'LIKE', 's7']])->paginate(15); 
Run Code Online (Sandbox Code Playgroud)

寻找带有关键字的产品samsung,galaxy,s7

现在我需要这个东西,但是会自动为可变数量的搜索查询部分生成,因此对于数组中的每个关键字,我都需要添加一个['keywords','LIKE','...'] ...

我如何用Laravels Eloquent做到这一点?

Cha*_*y22 6

使用闭包。首先,请确保您将关键字列表存储在数组等中。然后 ...

$keywords = ['samsung', 's7', 'what else'];

$products = Product::where(function ($query) use ($keywords) {
    foreach ($keywords as $keyword) {
       $query->orWhere('keyword', 'like', $keyword);
    }
})->paginate(15);
Run Code Online (Sandbox Code Playgroud)

其他例子

$keywords = [
    ['name', 'LIKE', $searchQuery],
    ['category_id', '=', $selectedSubcategory],
];

$products = Product::where(function ($query) use ($keywords) {
    foreach ($keywords as $keyword) {
        $query->where($keyword);
    }
})->paginate(15);
Run Code Online (Sandbox Code Playgroud)

除了其他

$keywords = [
    ['name', 'LIKE', $searchQuery],
    ['category_id', '=', $selectedSubcategory],
    ['please_id', '=', $learnPhpArray],
];

$products = Product::query();

foreach ($keywords as $keyword) {
    $products = $products->where($keyword);
}

return $products->paginate(15);
Run Code Online (Sandbox Code Playgroud)

orWhere是做什么的?是否将查询部分与AND连接?

不,用OR。与inverse(?)一样,where它本身AND默认情况下也会执行。


参考文献