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

Laravel使用when条件查询status=0数据时返回全部记录问题排查

问题根源

Laravel 查询构造器的 when() 方法执行规则为:仅当第一个传入参数的布尔判定结果为 true 时,才会执行第二个参数对应的闭包逻辑。

你代码中直接将 $this->status 作为判定参数,而在 PHP 的类型转换规则里,整数 0 会被判定为布尔值 false,因此当你设置 status 参数为 0 时,when() 直接跳过了内部的 where 筛选逻辑,没有加状态过滤条件,最终返回了全量数据。

修复方案

将 when() 的第一个参数改为对参数是否存在的判定,而非直接用参数值做布尔判断即可,示例如下:

Card::when(!is_null($this->status), function ($query){
                    $query->where('status', $this->status);
                         })
                ->search(trim($this->search))
                    ->orderBy('created_at', 'DESC')
                    ->get();

如果你的业务场景固定只需要筛选状态为 0 的记录,也可以直接写死判断规则:

Card::when($this->status === 0, function ($query){
                    $query->where('status', 0);
                         })
                // 后续逻辑保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:21:02