如何在Laravel WHERE子句中使用IN opearator?

时间:2019-09-19 12:41:30

标签: laravel laravel-query-builder

我正在使用Laravel构建高级表过滤器。客户端将一系列过滤器发送到服务器,以应用于模型并发送回结果。

在服务器端,我使用以下代码生成要在where子句中使用的条件数组:

$conditionArray=array();
foreach($filtersList as $filter) {
    $whereArray[]=array($filter['Column'], $filter['Condition']), $filter['Value']);
}
$data =  User::where($conditionArray)->get();

这对于简单运算符(=; <=; >=; !=)可以正常工作,但是当我尝试使用高级运算符(BETWEEN; { {1}})查询失败。

我的问题是如何在IN子句中添加INBETWEEN?有没有更好的方法可以完成我想做的事情?

1 个答案:

答案 0 :(得分:1)

Laravel查询生成器对inbetween运算符具有自己的方法。您应该检查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();

无论如何都要小心...此方法可能会导致性能问题,因此请避免使用过多的过滤器选择。