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子句有关,但我很难绕过它。任何帮助将不胜感激。
答案 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
将变量传递给闭包。
答案 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'] . '%');
});
这是构建查询的示例,但您可能需要调整,因为您没有提供足够的信息。