我正在使用Laravel构建高级表过滤器。客户端将一系列过滤器发送到服务器,以应用于模型并发送回结果。
在服务器端,我使用以下代码生成要在where子句中使用的条件数组:
$conditionArray=array();
foreach($filtersList as $filter) {
$whereArray[]=array($filter['Column'], $filter['Condition']), $filter['Value']);
}
$data = User::where($conditionArray)->get();
这对于简单运算符(=
; <=
; >=
; !=
)可以正常工作,但是当我尝试使用高级运算符(BETWEEN
; { {1}})查询失败。
我的问题是如何在IN
子句中添加IN
和BETWEEN
?有没有更好的方法可以完成我想做的事情?
答案 0 :(得分:1)
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();
无论如何都要小心...此方法可能会导致性能问题,因此请避免使用过多的过滤器选择。