如何在 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) 查询失败。

我的问题是如何将INBETWEEN添加到WHERE子句中?有没有更好的方法来完成我想做的事情?

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();

无论如何都要小心......这种方法可能会导致性能问题,所以尽量避免在过滤器选择上给予太多自由。