Laravel 8 分页查询场景下修改返回数据:日期格式化与关联字段筛选
解决方案
1. 修复日期格式化访问器不生效问题
你写的访问器命名存在错误,Laravel 访问器要求命名规范为 get{字段驼峰名}Attribute,注意是单数 Attribute,你写的是复数 Attributes 导致系统无法识别触发,两种实现方案可选:
方案A:修正访问器写法
在Garage模型中修改访问器代码:
public function getDateAttribute($value) { return date_format(date_create($value), 'd/m/Y'); }
方案B:使用$casts属性更简洁(推荐)
直接在Garage模型中添加$casts配置即可,无需手动写访问器,接口序列化时会自动完成格式化:
protected $casts = [ 'date' => 'date:d/m/Y', // 其他字段的类型转换可一并在这里配置 ];
2. 关联查询仅返回指定字段
预加载关联时可以直接指定需要查询的列,注意必须带上关联的外键字段(这里是rid),否则关联会返回null,修改控制器代码如下:
$q = Garage::with('relative:rid,rname')->paginate(15); return response()->json($q);
调整后返回的relative关联就只会包含rid和rname两个字段,符合你的需求。
可选优化
如果后续还有更多字段格式化、关联结构裁剪的需求,推荐使用Laravel的API资源类对输出结构做统一管理,避免把格式化逻辑散落在模型和控制器中,维护更方便。
内容的提问来源于stack exchange,提问作者Nathan Bryan
相关产品推荐
相关产品推荐

