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

Laravel中whereNull与where组合查询无返回结果的异常问题

问题原因及解决方案

你遇到的问题核心在于SQL对NULL值的比较逻辑:当使用!= 'failed'时,SQL会自动排除status字段为NULL的记录——因为任何和NULL的比较运算结果都是NULL(逻辑上视为false),哪怕这些记录原本符合whereNull('completed_at')的条件。你以为符合条件的2条数据,大概率是status字段为NULL的记录,所以被where('status', '!=', 'failed')过滤掉了。

解决方法

需要把status为NULL的情况也包含进来,有两种常用写法:

方法一:用闭包组合条件

$user
    ->shoePurchases()
    ->whereNull('completed_at')
    ->where(function($query) {
        $query->where('status', '!=', 'failed')
              ->orWhereNull('status');
    })
    ->get();

方法二:用原生SQL语句

$user
    ->shoePurchases()
    ->whereNull('completed_at')
    ->whereRaw("status != 'failed' OR status IS NULL")
    ->get();

验证建议

可以先单独查询目标数据的status值,确认是否为NULL:

$user->shoePurchases()->whereNull('completed_at')->select('id', 'status')->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:03:20