jquery - Laravel whereRaw,或带有 FIND_IN_SET 查询的 WhereRaw 未专门运行
问题描述
我的项目有问题。我的数据库中有逗号分隔值,我想显示与我选择的任何框匹配的数据。但我没有得到预期的结果
这是我的查询
$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]
提前致谢
解决方案
据我了解,$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(),它给了我 3 的 [550]。
对于 [550, 156] 我得到:
推荐阅读
- python - 如何将 MultiIndex 行附加到空的熊猫数据框
- r - 如何使用多个旧列的值创建新列?
- api - GET 请求来自 Postman,但不适用于 Android 和浏览器
- azure-cosmosdb - 如何从创建时获得 Azure Cosmos DB 项 TTL?
- r - 取R中列组的第一个值
- c++ - 共享指针管理堆栈对象
- css - 为什么这个元素的宽度不为0?
- python - 如何计算数据集的行完整性?
- sql - SQL 一个计数行中有多少行在另一个计数行中?
- javascript - 我应该在哪里存储用户首选项或用户设置 - localStorage 或 cookie?