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做到这一点?
使用闭包。首先,请确保您将关键字列表存储在数组等中。然后 ...
$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
默认情况下也会执行。
参考文献