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
相关产品推荐
相关产品推荐

