如何在 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'])
我需要在 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'])