修改追加属性的值

一般需要对现有属性格式化,我会选择加一个追加属性,声明属性

    protected $appends = [
        'phone_hide', 'sex_name' 
    ];

访问器

    public function getSexNameAttribute()
    {
        switch ($this->sex) {
            case 1:
                $sexName = '男';
                break;
            case 2:
                $sexName = '女';
                break;
            default:
                $sexName = '未设置';
                break;
        }
        return $sexName;
    }

使用

    $user = User::find(1);
    $user->sex_name;

现在遇到个情况,就是要在本次执行中修改sex_name的格式化规则
最简单的就是

    $user = User::find(1);
    $user->sex_name = '男士'; // 直接设置属性值,但是这样没有效果

变通方式是

    public function getSexNameAttribute()
    {
        // 根据
        if (array_key_exists('is_format_sex', $this->attributes) && $this->attributes['is_format_sex']) {
            switch ($this->sex) {
                case 1:
                    $sexName = '先生';
                    break;
                case 2:
                    $sexName = '女士';
                    break;
                default:
                    $sexName = '另类';
                    break;
            }
            return $sexName;
        } 
        switch ($this->sex) {
            case 1:
                $sexName = '男';
                break;
            case 2:
                $sexName = '女';
                break;
            default:
                $sexName = '未设置';
                break;
        }
        return $sexName;
    }

使用,在需要的地方设置is_format_sex值

    $user = User::find(1);
    $user->is_format_sex = true;
    $user->sex_name;  // 取值,达到的就是格式化的值
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!