菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
3153
0

修改追加属性的值

原创
05/13 14:22
阅读数 1494

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

    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;  // 取值,达到的就是格式化的值

发表评论

0/200
3153 点赞
0 评论
收藏
为你推荐 换一批