Laravel中whereNotIn遇null值失效问题求助
问题解决:Laravel whereNotIn 无法匹配 NULL 值
问题原因
这是SQL三值逻辑的特性导致的:NULL 和任何值进行比较(包括!=、NOT IN)都会返回UNKNOWN,而非TRUE或FALSE。所以当你执行whereNotIn('status', ['Draft'])时,status为NULL的记录不会被纳入查询结果。
解决方案
你需要额外处理NULL的情况,把status IS NULL的条件加入查询:
方案1:使用闭包组合条件
Order::where(function ($query) { $query->whereNotIn('status', ['Draft']) ->orWhereNull('status'); })->count();
方案2:使用whereRaw直接编写SQL逻辑
Order::whereRaw('status NOT IN (?) OR status IS NULL', ['Draft'])->count();
两种写法都能正确筛选出status不是'Draft' 或者 status为NULL的记录,最终得到预期的结果1。
内容的提问来源于stack exchange,提问作者Md. Azahar Alam
相关产品推荐
相关产品推荐

