使用Outlay::all()时如何避免返回status为null的数据
解决Laravel中过滤status为null的Outlay数据问题
方法一:查询时直接过滤(推荐)
直接在数据库查询阶段添加过滤条件,排除status为null的记录,这种方式性能最优,避免无用数据加载到内存中。
修改后的控制器代码:
return response()->json([OutlayResource::collection(Outlay::whereNotNull('status')->get())], 200);
方法二:使用全局作用域(适合多场景复用)
如果项目中多个地方都需要查询status不为null的Outlay数据,可以在模型中定义全局作用域,让所有查询自动应用该过滤规则:
在Outlay模型中添加以下代码:
protected static function booted() { static::addGlobalScope('valid_status', function ($query) { $query->whereNotNull('status'); }); }
添加后,原代码中的Outlay::all()会自动排除status为null的记录,无需每次手动添加条件。
补充说明
- 方法一适合单次查询场景,灵活可控;
- 方法二适合需要统一过滤规则的多场景,减少重复代码。
内容的提问来源于stack exchange,提问作者laraCoder
相关产品推荐
相关产品推荐

