1. 自动转换数据格式
例如,mysql表存的是json数据,但是查询出来的是要数组格式的
最常见的是查询出来再循环处理
这个可以用一个简单的方法解决,用model,在对应的model添加如下代码
protected $casts = [ 'bank_info' => 'array', ];
其中 bank_info是数据库字段,array是要转换的最终数据格式
只要这几行代码就解决了,不需要再去循环操作
2. 自动返回每条数据处理的结果
例如,最常见的状态字段,每个数值代表什么
你也可以用循环去处理解决
其实模型层也提供了处理的方法
(1)如果你要改变原本字段返回的结果,直接在模型层加以下方法就行了
- public function getStatusAttribute()
- {
- $status = $this->attributes['status'];
- if ($status == 0) {
- return '打款中';
- } elseif ($status == 1) {
- return '已打款';
- } elseif ($status == 2) {
- return '已拒绝';
- } elseif ($status == 3) {
- return '已取消';
- }
- }
方法名称固定 get + 字段名称+ Attribute
上面的最终返回结果是 原本的status=>1换成了status=>'已打款'
(2)如果你想保留原字段,用新字段展示
方法名称命名规则一样,把字段名称换成要展示的新字段名称,
然后多一段代码,定义字段的名称
protected $appends = [ 'status_text' ];
总的代码如下
- protected $appends = [
- 'status_text'
- ];
- public function getStatusTextAttribute()
- {
- $status = $this->attributes['status'];
- if ($status == 0) {
- return '打款中';
- } elseif ($status == 1) {
- return '已打款';
- } elseif ($status == 2) {
- return '已拒绝';
- } elseif ($status == 3) {
- return '已取消';
- }
- }
上面返回的结果保留原本的status=>1,新增一个字段 status_text=>'已打款'