gpt4 book ai didi

jquery - Laravel whereRaw、orWhereRaw 与 FIND_IN_SET 查询未专门运行

转载 作者:行者123 更新时间:2023-11-29 16:07:10 27 4
gpt4 key购买 nike

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

这是我的查询

$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]

我检查选择框的我的 Blade 文件 enter image description here

提前致谢

最佳答案

据我了解,$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)');
});
}
}
});

我在 View 中对结果进行了 dd() 处理,得到了 [550] 的 3。

enter image description here

对于 [550, 156] 我得到:

enter image description here

关于jquery - Laravel whereRaw、orWhereRaw 与 FIND_IN_SET 查询未专门运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55626026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com