如何在 Laravel WHERE 子句中使用 IN 运算符?
How to use IN opearator in Laravel WHERE clause?
我正在使用 Laravel 构建高级 table 过滤器。客户端向服务器发送一组过滤器以应用于模型并发回结果。
在服务器端,我使用以下代码生成要在 where 子句中使用的条件数组:
$conditionArray=array();
foreach($filtersList as $filter) {
$whereArray[]=array($filter['Column'], $filter['Condition']), $filter['Value']);
}
$data = User::where($conditionArray)->get();
对于简单运算符(=
;<=
;>=
;!=
),这按预期工作,但是当我尝试使用高级运算符(BETWEEN
; IN
) 查询失败。
我的问题是如何将IN
和BETWEEN
添加到WHERE
子句中?有没有更好的方法来完成我想做的事情?
Laravel 查询构建器有自己的 in
和 between
运算符方法。您应该查看 official documentation 了解更多信息。
我遇到了类似的问题,但我已经用稍微不同的方法解决了它。举个例子:
$query = MyModel::newQuery();
foreach($statements as $statement) {
switch($statement['operator']) {
case 'between':
$query->whereBetween([...]);
break;
case 'in':
$query->whereIn([...]);
break;
/* OTHER CASES */
default:
$query->where(/*...*/);
break;
}
}
$models = $query->get();
结果类似于此语句:
$models = MyModel::where([...])->whereIn([...])->[...]->get();
无论如何都要小心......这种方法可能会导致性能问题,所以尽量避免在过滤器选择上给予太多自由。
我正在使用 Laravel 构建高级 table 过滤器。客户端向服务器发送一组过滤器以应用于模型并发回结果。
在服务器端,我使用以下代码生成要在 where 子句中使用的条件数组:
$conditionArray=array();
foreach($filtersList as $filter) {
$whereArray[]=array($filter['Column'], $filter['Condition']), $filter['Value']);
}
$data = User::where($conditionArray)->get();
对于简单运算符(=
;<=
;>=
;!=
),这按预期工作,但是当我尝试使用高级运算符(BETWEEN
; IN
) 查询失败。
我的问题是如何将IN
和BETWEEN
添加到WHERE
子句中?有没有更好的方法来完成我想做的事情?
Laravel 查询构建器有自己的 in
和 between
运算符方法。您应该查看 official documentation 了解更多信息。
我遇到了类似的问题,但我已经用稍微不同的方法解决了它。举个例子:
$query = MyModel::newQuery();
foreach($statements as $statement) {
switch($statement['operator']) {
case 'between':
$query->whereBetween([...]);
break;
case 'in':
$query->whereIn([...]);
break;
/* OTHER CASES */
default:
$query->where(/*...*/);
break;
}
}
$models = $query->get();
结果类似于此语句:
$models = MyModel::where([...])->whereIn([...])->[...]->get();
无论如何都要小心......这种方法可能会导致性能问题,所以尽量避免在过滤器选择上给予太多自由。