如何在 where 子句中组合 AND 和多个 OR 条件

How to combine AND and multiple OR conditions in where clause

我需要在 Laravel 中创建这种 sql 查询:

SELECT * FROM `list` WHERE `column_A` > 100 AND (`column_B` = 'value_1' OR `column_B` = 'value_2' OR `column_B` = 'value_3' OR ... `column_B` = 'value_n')

问题是我需要将条件的第二部分(在“AND”之后)作为包含条件的数组插入,即:

$conditions = array(['column_B', '=', 'value_1'], ['column_B', '=', 'value_2'], ['column_B', '=', 'value_3']), ['column_B', '=', 'value_n']);

所以我可以分别创建每组条件。

在 Laravel 查询生成器中有这样的方法吗(请不要 Eloquent)?

为了对条件进行分组,您必须使用闭包,您可以在此处阅读更多内容:https://laravel.com/docs/8.x/queries#or-where-clauses

\DB::table('list')
    ->where('column_A', '>', 100)
    ->where(function($q) use ($conditions) { 
        foreach ($conditions as $condition) { 
            $q->orWhere(...$condition); 
        }  
    });

由于您需要根据多个值检查一列,您可以简单地使用 whereIn:

->where('column_A', '>', 100)
->whereIn('column_B', ['foo', 'bar', 'baz'])