将两个参数传递给嵌套的where会导致查询附加“和``null”

时间:2015-07-13 17:26:58

标签: mysql laravel where where-clause

      if ($input['search']) {
            $args = array($query, $input);
            $query->where(call_user_func_array(function($query, $input) {
                $query->where('tbl_products.name', 'LIKE', '%' . $input['search'] . '%')
                    ->orwhere('sku', 'LIKE', '%' . $input['search'] . '%');
            }, $args));
        }
    }
    return $query;

上面是我的查询的一部分,我打算创建一个类似的嵌套where子句:

WHERE
    m.name = 'name' AND
    (p.name LIKE "% example %" or p.sku LIKE "% example %")

我已经使用'call_user_func_array'将多个参数传递给闭包(只有这样我才能将用户输入传递给where子句)。

不幸的是,我收到的查询异常看起来有点像这样:

  

'where子句'中的未知列''    ... name LIKE%example%或sku LIKE%example%和``is null

和``为null已附加到结尾。我认为这与需要两个参数的原始where子句有关,但我很难绕过它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

if ($input['search']) {
    $query->where(function ($query) use ($input) {
        $query->where('tbl_products.name', 'LIKE', '%' . $input['search'] . '%')
            ->orWhere('sku', 'LIKE', '%' . $input['search'] . '%');
    });
}

您可以通过use将变量传递给闭包。

参考:Anonymous Functions

答案 1 :(得分:0)

您不需要致电call_user_func_array而您做错了。对于嵌套的where子句,在您的情况下,您可以使用以下内容:

// Assumed that you have $query variable, so

$query
->where('m.name', 'name') // = is optionl
->where(function($query) use ($input) // use copies the variable inside the function scope
{
    $query
    ->where('p.name', 'LIKE', '%' . $input['search'] . '%')
    ->orWhere('p.sku', 'LIKE', '%' . $input['search'] . '%');
});

这是构建查询的示例,但您可能需要调整,因为您没有提供足够的信息。