1.命名規則 get + 屬性名的駝峰命名+ Attr ------>在相應的model中創建方法
例如:
1 protected function getSexAttr($value) { 2 $text = [1 => '男', 2 => '女', 3 => '保密']; 3 return $text[$value]; 4 }
此情景下user表里是存在sex字段的,sex的值為1,2,3三種情況。這個獲取器的作用在於,后台獲取user表的list后,sex值仍為1,2,3。前台循環調用的時候就可以用{volist name="list" id="v" key="k"}{$v.sex}{/volist} 此時的{$v.sex}就對應成男,女,未知。
2.針對前台需要用到sex值1,2,3同時也要用到文本值男,女,未知的時候,這個獲取器就有局限性了,此時,小伙伴們很容易想到,定義兩個獲取器,一個存1,2,3另一個存男,女,未知。ok,這個方法是可行的,在這里簡單介紹一下我想到的方法,定義一個獲取器存二維數組。
eg2:
protected function getSexAttr($value) { $text = [1 => '男', 2 => '女', 3 => '未知']; return ['val' => $value, 'text' => $text[$value]]; }
這種情況下,前台就可以直接使用了{$v.sex.val}是1,2,3值的格式。{$v.sex.text}就是男,女,未知的格式。
看到這里,相信小伙伴們已經蠢蠢欲動了吧,這還不止呢,接下來介紹一下,定義不存在的字段,映射其他表的字段。就可以應用到項目中了。
3.關聯其他表的字段構建user表里不存在的字段,其他表就以info表為例吧
eg3:
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了,可以省去兩表聯合查詢
4.如果又需要用到值,又需要用到文本的情況,就可以用第二個例子的思路了。
eg4:
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字段了。
本文並非原創
參考:https://www.cnblogs.com/dreamflycc/p/getAttr.html 作者:
dreamfly_cc
