一.模型獲取器
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'); }