php 雄辩-多个WHERE LIKE条件

6mzjoqzu  于 2023-01-08  发布在  PHP
关注(0)|答案(4)|浏览(97)

我目前正尝试在我的数据库中实现关键字搜索,因此我拆分了一个用逗号分隔的字符串,这样我得到了一个包含可变数量元素的数组(一个关键字)。
我知道我可以用这样一个雄辩的概念:

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

以查找具有关键字samsung,galaxy,s7的产品。
现在我需要这个东西,但自动生成的搜索查询部分的数量可变,所以对于每个关键字在数组中,我需要添加一个['关键字','喜欢','...']...
我怎么能用Laravels的口才做到这一点?

brjng4g3

brjng4g31#

使用闭包。首先,确保你把关键字列表存储到数组中。然后...

$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。作为逆(?),where本身默认执行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
iklwldmw

iklwldmw2#

不就是为了生成数组吗?还是我误解了这个问题?

<?php

$keys = ['samsung', 'lg', 'sony', 'nokia', 'apple'];
$keywords = [];
foreach($keys as $key){
    $keywords[] = ['keywords', 'LIKE', '%'.$key.'%'];
}

$products = Product::where($keywords)->paginate(15);
knpiaxh1

knpiaxh13#

您可以执行以下操作:

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

检查代码的第一部分是如何工作的:https://eval.in/730772

6tdlim6h

6tdlim6h4#

拉腊维尔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();

相关问题