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

Laravel Eloquent如何优雅实现多维度数组WhereNot的OR条件查询

优雅实现多组OR条件的NOT查询需求

我需要检索所有不满足指定多组(from, to)匹配条件的数据行,预期生成的SQL如下:

SELECT * FROM range
WHERE NOT (
    (from = 1000 AND to = 2000) OR (from = 2000 AND to = 3000)
);

我尝试用Laravel查询构造器写了如下代码:

$array = [
    [
        'from' => 1000,
        'to' => 2000,
    ],
    [
        'from' => 2000,
        'to' => 3000
    ]
];

$this->whereNot(function ($query) use ($array) {
    foreach($array as $item) {
        $query->where($item);
    }
});

但生成的SQL不符合预期,两组条件被错误地用AND连接:

SELECT * FROM range
WHERE NOT (
    (from = 1000 AND to = 2000) AND (from = 2000 AND to = 3000)
);

我目前的临时解决方案是通过判断迭代索引来区分where和orWhere:

$this->whereNot(function ($query) use ($array) {
    foreach($array as $i => $item) {
        if($i == 0) {
            $query->where($item);
        } else {
            $query->orWhere($item);
        }
    }
});

这个方案可以正常工作,但我想了解是否存在无需判断迭代索引的更优雅实现方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:10:29