我的项目有问题。我的数据库中有逗号分隔的值,我想显示与所选框匹配的数据。但是我没有得到预期的结果
这是我的查询
$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查询运行时,我得到了额外的数据。
我的选择框数据示例为[118,112]
预先感谢
答案 0 :(得分:0)
据我了解, $ request-> get('connectivity')有一个看起来像[118,112]的数组。 您要过滤在其连接性列中包含这两个值中任何一个的产品。
您只需要创建一个where闭包,然后在其中而不是外部运行循环。
$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。
对于[550,156]我得到: