Laravel Eloquent中‘<>’与‘!=’的区别及查询结果差异
Laravel Eloquent 中
<> 和 != 的区别及问题解析 首先明确:在Laravel Eloquent里,<>和!=本质上没有功能差异,它们都是用来表示“不等于”的查询条件,最终编译成SQL时,两者都会被转换为SQL标准的<>操作符(部分数据库如MySQL也兼容!=写法)。
你遇到的查询结果差异,根本原因不是这两个操作符的区别,而是SQL对NULL值的比较逻辑:
- SQL中,
NULL和任何值进行比较(包括用<>或!=)都会返回UNKNOWN,不会被纳入查询结果。 - 当你执行
->where("payed",'<>',2)时,只会筛选出payed字段值不为2且不为NULL的记录;如果你的数据中符合条件的非NULL记录不存在,就会返回空数组。 - 而闭包查询里的
->where('payed','!=',2)->orWhere('payed',null),明确把payed为NULL的记录也纳入了筛选范围,所以能得到预期结果。
总结:如果你的字段可能存在NULL值,需要同时处理“不等于某值”和“值为NULL”两种情况,单独用<>或!=都无法覆盖NULL的场景。
内容的提问来源于stack exchange,提问作者Hossein Rouhi
相关产品推荐
相关产品推荐

