獲取器的做用是在獲取數據的字段值後自動進行處理,例如,咱們須要對狀態值進行轉換,能夠使用:數據庫
一、數據庫字段轉換。數組
class User extends Model { public function getStatusAttr($value) { $status = [-1=>'刪除',0=>'禁用',1=>'正常',2=>'待審覈']; return $status[$value]; } }
數據表的字段會自動轉換爲駝峯法,通常status字段的值採用數值類型,咱們能夠經過獲取器定義,自動
轉換爲字符串描述。spa
$user = User::get(1); echo $user->status; // 例如輸出「正常」
若是同時須要狀態值和狀態名稱code
protected function getSexAttr($value) { $text = [1 => '男', 2 => '女', 3 => '未知']; return ['val' => $value, 'text' => $text[$value]]; }
這種狀況下,前臺就能夠直接使用了{$v.sex.val}是1,2,3值的格式。{$v.sex.text}就是男,女,未知的格式。對象
二、轉換數據庫不存在的字段,主要是這個用法blog
class User extends Model { public function getStatusTextAttr($value,$data) { $status = [-1=>'刪除',0=>'禁用',1=>'正常',2=>'待審覈']; return $status[$data['status']]; } }
數據庫不存在這個status_text字段,可是若是在使用user對象取status_text 字段的話,就會自動調用這個轉換器。(這裏須要注意的是第二個參數,$data是整個user對象數組)字符串
$user = User::get(1);
echo $user->status_text; // 例如輸出「正常」
get
三、關聯其餘表的字段構建user表裏不存在的字段,其餘表就以info表爲例吧io
protected function getHosNameAttr($value, $data) { $name = model('Info')->where('info_id', $data['id'])->value('hos_name'); return $name; }
在user表裏構造了hos_name字段,這個例子很簡單,user表的主鍵id是info表的外鍵info_id,經過這個關係就能夠將info裏的字段映射到user表裏,在後臺只查詢user表的數據就能用hos_name了,能夠省去兩表聯合查詢function
若是又須要用到值,又須要用到文本的狀況
protected function getArchivesAttr($value, $data) { $archiveid = model('Info')->where('info_id', $data['id'])->value('archives_id'); $archivename = model('Archives')->where('id', $archiveid)->value('name'); return ['val' => $archiveid, 'text' => $archivename]; }
此示例,在user表裏構建了archives字段,val存的是info表的archives_id字段,text是archives_id對應的在表archives裏的name字段。省去了三表聯合查詢,這樣在後臺只須要查詢user表就能夠在前臺調用archives字段了。