Laravel 7 查询构造器orWhere混合嵌套and条件的实现问题
Laravel 查询构造器OR分组AND条件实现方案
你可以直接使用Laravel查询构造器的闭包分组条件功能实现需求,orWhere方法传入闭包时,闭包内的所有条件会自动被括号包裹,且闭包内默认使用AND拼接条件,正好匹配你需要的「or (A and B)」逻辑。
修改后的完整代码如下:
return $builder->whereHas('tags', function(Builder $query) use($tagId, $yourCustomParam) { $query->where('tags.name', 'verification') ->orWhere('tags.name', 'pending') // 分组OR条件,内部为AND逻辑 ->orWhere(function ($query) use ($yourCustomParam) { $query->whereNotNull('assigned_to') // 下方替换为你自己的自定义条件即可 ->where('your_custom_column', $yourCustomParam) ->where('other_column', 'expected_value'); }); });
最终生成的SQL WHERE段逻辑和你要求的完全一致:
WHERE tags.name = 'verification' OR tags.name = 'pending' OR ( assigned_to IS NOT NULL AND your_custom_column = ? AND other_column = 'expected_value' )
内容的提问来源于stack exchange,提问作者andyiscoding
相关产品推荐
相关产品推荐

