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

PSQL查询转Laravel Eloquent Builder语句结果异常问题排查

问题根源

你有两处核心写法错误:

  1. bar字段的筛选逻辑错误
    原生SQL里bar是bar='x' OR bar='y'的或关系,但你在闭包里写的两个where是且关系,要求bar同时等于两个不同的值,该条件永远不会成立。
  2. 顶层逻辑分组错误
    原生SQL三个筛选条件是并列的且关系:foo='abc' AND (bar条件) AND id排除条件,但你用了顶层的orWhere,会把逻辑拆成(foo='abc' AND id排除) OR (bar条件),运算符优先级完全混乱。你后续调整whereNotIn的调用位置也没有解决这个逻辑优先级问题,所以结果依然不符合预期。

正确的写法

DB::table("example")
    ->where("example.foo", "=", "abc")
    // 把bar的或条件作为一个整体和其他条件做AND关联
    ->where(function ($query) {
        $query->where("example.bar", "=", "x")
              ->orWhere("example.bar", "=", "y");
    })
    ->whereNotIn("example.id", $array_of_ids)
    ->distinct()
    ->select("example.id");

上述代码生成的SQL会完全匹配你给出的原生PSQL语句,返回符合预期的结果。

内容的提问来源于stack exchange,提问作者pickle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04