编程语言
首页 > 编程语言> > php – Eloquent – 多个WHERE LIKE条件

php – Eloquent – 多个WHERE LIKE条件

作者:互联网

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

我知道我可以使用这样一个雄辩的结构:

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

找到一个产品的关键字samsung,galaxy,s7.

现在我需要这个东西,但是为可变数量的搜索查询部分自动生成,所以对于数组中的每个关键字,我需要添加一个[‘keywords’,’LIKE’,’…’] …

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

解决方法:

使用闭合.首先,确保将关键字列表存储到数组等中.然后 …

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

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

其他例子

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

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

除了其他

$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);

orWhere做了什么?它是否用AND连接查询部分?

不,用OR.作为逆(?),默认情况下它本身就是AND.

参考

> https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_where
> https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_orWhere

标签:php,laravel,mysql,eloquent,laravel-eloquent
来源: https://codeday.me/bug/20190727/1552854.html