【问题标题】:Laravel whereRaw, orWhereRaw with FIND_IN_SET query not running specificallyLaravel whereRaw,或带有 FIND_IN_SET 查询的 WhereRaw 未专门运行
【发布时间】:2019-09-01 16:59:00
【问题描述】:

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

这是我的查询

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

我从哪里检查选择框的我的刀片文件

提前致谢

【问题讨论】:

  • 所选框的外观以及数据库中存储的数据是谁,您能举一些例子吗
  • @OsamaAlvi 更新了我的问题。请看一下
  • 明确一点,$request->get('connectivity') 是什么样的?另外,I get extra data 到底是什么意思?有什么问题?
  • @Don'tPanic 执行的响应数据应该是 12 项,但执行此查询后我得到 39 项,我的 $request->get('connectivity') 是在 Blade 文件中检查的数组
  • 对不起,这对我们没有任何意义。为什么您只期待 12 件商品?其他 27 项有什么问题?我们不知道您的数据,我们无法说出您的期望或原因。此外,我们不需要查看表单的图片,我们需要查看数据,例如 HTML,或者更好的是,dd($request->get('connectivity')) 的样子。

标签: jquery mysql laravel search


【解决方案1】:

据我所知, $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()'d 视图中的结果给我 3 for [550]。

对于 [550, 156] 我得到:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2018-07-03
    • 2020-02-14
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多