模型獲取器和模型修改器

一.模型獲取器

1. 獲取器的作用是對模型實例的數據做出自動處理;

2. 一個獲取器對應模型的一個特殊方法,該方法爲 public;

3. 方法名的命名規範爲:getFieldAttr(); 比如有UserModel中的 bid字段 getBidAttr()

4. 舉個例子,數據庫表示狀態 status 字段採用的是數值;而頁面上,我們需要輸出 status 字段希望是中文,就可以使用獲取器(0代表:未註冊,1代表:已註冊);

5.不使用模型獲取器顯示效果如下:

如果以上想要實現bid爲1 顯示“第一個註冊的” 那需要if判斷很麻煩

6. 在 User 模型端,我創建一個對外的方法,如下:

    // 創建模型獲取器,參數$value 爲bid 字段的各個值 
    public function getBidAttr($value){
        // 設置bid字段的規則匹配
        $bid=[1=>'第一個註冊的',2=>'第二個註冊的'];
        // 根據規則返回
        return $bid[$value];
    }

控制器中獲取數據,效果如下

    public function show(){
       $user = UserModel::find();
       return json($user);

    }

除了 getBidAttr 中 Field 可以是字段值,也可以是自定義的虛擬字段;

 

    // 定義函數沒有的字段 $value 只是個佔位符,第二個參數$data 得到的是篩選到的數據,然後得到最終值;
    public function getNoAttr($value,$data){
        // 設置bid字段的規則匹配
        $bid=[1=>'第一個註冊的',2=>'第二個註冊的'];
        // 根據規則返回
        return $bid[$data['bid']];
    }

8.No這個字段不存在,而此時參數$value 只是爲了佔位,並未使用;

10. 第二個參數$data 得到的是篩選到的數據,然後得到最終值;

11. 如果你定義了獲取器,並且想獲取原始值,可以使用 getData()方法;

    // 定義函數沒有的字段 $value 只是個佔位符,第二個參數$data 得到的是篩選到的數據,然後得到最終值;
    public function getNoAttr($value,$data){
        // 設置bid字段的規則匹配
        $bid=[1=>'第一個註冊的',2=>'第二個註冊的'];
        // 根據規則返回,$data 爲獲取到的數據數組,我們就需要bid列
        return $bid[$data['bid']];
    }

控制器

    public function show(){
        //根據主鍵獲取UserModel對象
       $user = UserModel::find();
       return $user->No;

    }

返回效果顯示

 

 

如果你定義了獲取器,並且想獲取原始值,可以使用 getData()方法;

    public function show(){
        //根據主鍵獲取UserModel對象
       $user = UserModel::find();
       //獲取全部原始數據  
       dump($user->getData());
       //獲取bid 字段原始數據
       echo $user->getData('bid');

    }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章