You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:57:37