修改追加屬性的值

haibin_hu發表於2019-05-29

一般需要對現有屬性格式化,我會選擇加一個追加屬性,宣告屬性

    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 協議》,轉載必須註明作者和本文連結

相關文章