laravel 关于访问器与序列化追加json值的使用问题 append()无效问题

4 篇文章 0 订阅

laravel 关于访问器与序列化追加json值的使用问题 append()无效问题

关于访问器使用

先创建一个访问器,我们拿id举例吧

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * @param  string  $value
     * @return string
     */
    public function getIdNameAttribute($value)
    {
        return md5($value);
    }
}

访的该字段就会自动执行访问器

$user = App\User::find(1);

$id = $user->id;

# 结果  "c81e728d9d4c2f636f067f89cc14862c"

特别说明一点 访问到字段id才会起作用,列表也可以被执行

关于序列化追加值

***这这里我们必须要搞清楚以下几点***

  1. 模型内定义的 appends 字段是可以在单条查询和列表查询都可以追加
  2. 控制器或路由模型调用append()或setAppend()方法 查询单条数据可以追加数据,但是列表查询并未追加,需要通过迭代集合来添加

下面的实例只会演示列表查询,单条查询正常使用没毛病

在给出数据的时候我们可能要加密id,但是后台也用id,导致业务冲突,那就需要将id别名了,但同时得保留id,毕竟后台是靠id处理的,所以就有了追加值。
继续用id测试(测试都是在user模型)
首先我们给模型$appends添加属性名,也就是你要追加值的名字 (注意,尽管访问器使用「驼峰命名法」方式定义,但是属性名通常以「蛇形命名法」的方式来引用,使用 append 方法追加属性后,它将包含在模型的数组和 JSON 中。appends 数组中的属性也将遵循模型上配置的 visible 和 hidden 设置)

    /**
     * 追加到模型数组表单的访问器。
     *
     * @var array
     */
    protected $appends = ['ids'];

然后在模型内创建该追加值ids的访问器(驼峰命名) 不要纠结md5加密的事,只是演示而已😄

public function getIdsAttribute()
    {
        return id_encode($this->attributes['id']);
    }

访问我们可以看到 id得到了保留,同时追加了加密的ids

如果给前端提供数据不需要可以隐藏了,这个方法就比较简单了,自己搞吧

但是总是加密id有些没必要,后台都不需要,只有前台才需要,所有需要动态去追加值
官方说明:
你可以在单个模型实例上使用 append 方法来追加属性。或者,使用 setAppends 方法来重写整个追加属性的数组
模型内

// 隐藏append
 /**
 * 追加参数
 * @var array
 */
 //protected $appends = ['_ids'];

控制器内

$user = new \App\User();
    $user=$user->select('id')->append(['ids'])->get();

结果 _ids 追加并没有

我们可以看到集合内并没有 append 追加的属性

现在进行迭代集合

$user = new \App\User();
    $user=$user->select('id')->get()->transform(function ($item){
        return $item->append(['_ids']);
    });

哦吼!apends里面有了追加值 ‘_ids’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值