Laravel7中如何构建NOT包裹的查询条件?
Laravel 7 构建 NOT (OR) 查询的正确方式
要生成目标SQL语句:
WHERE
id=1 AND NOT (tag='foo' OR tag='bar')
有两种常用的正确实现方式:
方法一:使用 whereNot 包裹闭包
直接通过whereNot方法包裹包含OR条件的闭包,这是最直观对应目标SQL的写法:
$q->where('id', 1) ->whereNot(function ($iq) { $iq->where('tag', 'foo') ->orWhere('tag', 'bar'); });
方法二:使用 whereNotIn 简化逻辑
由于NOT (tag='foo' OR tag='bar')和tag NOT IN ('foo', 'bar')逻辑等价,你可以用更简洁的whereNotIn实现:
$q->where('id', 1) ->whereNotIn('tag', ['foo', 'bar']);
为什么你的写法不生效
你尝试的->where('!=', function ($iq) { ... })不符合Laravel查询构造器的语法规则:
where方法的第一个参数如果是字段名,第二个参数需要是具体值,闭包不能作为!=的比较对象- 这种写法无法被解析为合法的SQL逻辑,因此无法生成你需要的查询
内容的提问来源于stack exchange,提问作者JohnSmith
相关产品推荐
相关产品推荐

