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

Laravel查询构造器中如何使用不等于条件配合数组执行WHERE查询

Laravel查询构造器实现多值不等于条件的正确姿势

嘿,这个问题我太熟了!其实Laravel已经帮我们准备好了非常简洁的方法来实现你要的需求,不用手动写一堆!=条件。

首选方案:使用whereNotIn方法

你要的SQL语句select * from Table where a != '1' and a != '2' and a != '4' and a != '6',完全等价于NOT IN查询,Laravel的查询构造器提供了whereNotIn方法来直接实现这个逻辑,代码既简洁又高效:

// 注意数组的正确语法是[],不是()
$removeIdListArray = [1, 2, 4, 6];
// 正确的查询代码
$removedIdList = Stack::whereNotIn('columnA', $removeIdListArray)->get();

这段代码生成的SQL就是:

select * from `stacks` where `columnA` not in (1, 2, 4, 6)

和你想要的多个!=条件效果完全一致,而且数据库对NOT IN的查询优化通常比多个AND的!=更好,性能更优。

如果你非要手动添加多个!=条件(不推荐)

如果因为某些特殊场景,你确实需要生成多个a != x的AND条件,可以通过循环来逐个添加:

$removeIdListArray = [1, 2, 4, 6];
// 初始化查询构造器
$query = Stack::query();
// 循环添加每个!=条件
foreach ($removeIdListArray as $id) {
    $query->where('columnA', '!=', $id);
}
// 执行查询
$removedIdList = $query->get();

这段代码会生成你最开始想要的那种SQL语句,但相比whereNotIn,代码冗余度更高,性能也没有优势,所以除非有特殊需求,否则优先用第一种方案。

补充说明

Laravel查询构造器中,直接用where('column', '!=', $array)是不行的——因为!=运算符只支持单个值,当你传入数组时,Laravel会把它当成单个参数处理,导致语法错误。而whereNotIn就是专门为“排除数组中所有值”这个场景设计的方法,完美匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:02:42