Laravel whereRaw或WhereRaw与FIND_IN_SET查询未专门运行

时间:2019-04-11 06:30:35

标签: jquery mysql laravel search

我的项目有问题。我的数据库中有逗号分隔的值,我想显示与所选框匹配的数据。但是我没有得到预期的结果

这是我的查询

$products = $products->where('status', 1);
if ($request->get('connectivity')) {
    foreach ($request->get('connectivity') as $key => $connectivity) {
        if ($key == 0) {
            $products = $products->whereRaw('FIND_IN_SET(' . $connectivity . ',connectivity)');
        } else {
            $products = $products->orWhere(function ($query) use ($connectivity){
                $query->whereRaw('FIND_IN_SET(' . $connectivity . ',connectivity)');
            });
        }
    }
}

$products = $products->get();

我的whereRaw查询成功运行,但是当orWhere查询运行时,我得到了额外的数据。

我的数据库结构是 enter image description here

我的选择框数据示例为[118,112]

我检查选择框所在的“我的刀片文件” enter image description here

预先感谢

1 个答案:

答案 0 :(得分:0)

据我了解, $ request-> get('connectivity')有一个看起来像[118,112]的数组。 您要过滤在其连接性列中包含这两个值中任何一个的产品。

您只需要创建一个where闭包,然后在其中而不是外部运行循环。

我创建了一个像这样的表结构: Sample Table

$connectivity = [550]; # Similar to $request->get('connectivity')
$products = ProductModel::where('active', '1');
$products = $products->where(function($q) use($connectivity){
    foreach($connectivity as $key=>$c){
        if ($key == 0) {
            $q = $q->whereRaw('FIND_IN_SET(' . $c . ',connectivity)');
        } else {
            $q = $q->orWhere(function ($query) use ($c){
                $query->whereRaw('FIND_IN_SET(' . $c . ',connectivity)');
            });
        }
    }
});

我在视图中dd()将结果赋予[550] 3。

enter image description here

对于[550,156]我得到:

enter image description here