获取器的做用是在获取数据的字段值后自动进行处理,例如,咱们须要对状态值进行转换,能够使用:数据库
一、数据库字段转换。数组
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字段了。