Php 雄辩-多个相似的条件
我目前正试图在我的数据库中实现关键字搜索。因此,我拆分了一个由逗号分隔的字符串,因此得到了一个包含可变数量元素(一个关键字)的数组 我知道我可以使用这样一个雄辩的结构:Php 雄辩-多个相似的条件,php,mysql,laravel,eloquent,laravel-eloquent,Php,Mysql,Laravel,Eloquent,Laravel Eloquent,我目前正试图在我的数据库中实现关键字搜索。因此,我拆分了一个由逗号分隔的字符串,因此得到了一个包含可变数量元素(一个关键字)的数组 我知道我可以使用这样一个雄辩的结构: $products = Product::where([['keywords', 'LIKE', %samsung%], [keywords, 'LIKE', 's7']])->paginate(15); 查找关键字为三星、银河、s7的产品 现在我需要这个东西,但是会自动为可变数量的搜索查询部分生成,所以对于数组中的每
$products = Product::where([['keywords', 'LIKE', %samsung%], [keywords, 'LIKE', 's7']])->paginate(15);
查找关键字为三星、银河、s7的产品
现在我需要这个东西,但是会自动为可变数量的搜索查询部分生成,所以对于数组中的每个关键字,我需要添加一个['keywords'、'LIKE'、'…]
如何使用Laravels Elotent实现这一点?使用闭包。首先,确保将关键字列表存储到数组或类似的内容中。然后
$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);
奥兰多在哪里做什么?它是否使用AND连接查询部分 否,带有
或。与之相反(?)的是,其中
本身在默认情况下执行和
参考资料
这不只是为了生成阵列吗?还是我误解了这个问题
<?php
$keys = ['samsung', 'lg', 'sony', 'nokia', 'apple'];
$keywords = [];
foreach($keys as $key){
$keywords[] = ['keywords', 'LIKE', '%'.$key.'%'];
}
$products = Product::where($keywords)->paginate(15);
您可以执行以下操作:
$query = "Samsung galaxy S7"; // Or whatever the query is
$words = preg_split("/[ ,.]/",$query); //Split on space comma or dot. Maybe need more?
$queries = array_map(function ($word) {
return [ "keywords", "LIKE", "%$word%" ];
}, $words); //Transform single words to array of queries
$products = Product::where($queries)->paginate(15);
检查代码的第一部分是如何工作的:laravel 5.6
$keyWords = KeyWordModel::all();
$keyWordQuerys = [];
foreach ($keyWords as $key => $item) {
$keyWordQuerys[$key] = ['title', 'like', '%'.$item->name.'%'];
}
$contents = ContentModel::query();
foreach ($keyWordQuerys as $key => $item) {
$contents = $contents->orwhere([$item]);
}
$contents = $contents->orderBy('pubDate', 'DESC')->get();
闭包方式(如Chay22所说)可能是一种方式,因为它是最干净和最“Laravel”:)我想问你一个关于闭包的问题:我如何将它与其他选择方式结合起来,就像我在另一个问题上提到的那样?你总是可以链接另一个where(…)->where(…)->paginate(15);奥兰多在哪里做什么?它是否将查询部分与AND连接起来?此外,我需要传入更多的选择内容,因此它类似于$products=Product::where([['name','like',$searchQuery],'category_id','=',$selectedSubcategory]])->分页(15)代码>然后我需要关键字的东西。。。那么我该如何组合呢?为什么不循环搜索查询部分并将它们添加到一个数组中,然后在where方法中使用该数组呢