thinkphp5 获取器的

获取器的做用是在获取数据的字段值后自动进行处理,例如,咱们须要对状态值进行转换,能够使用:数据库

一、数据库字段转换。数组

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字段了。
相关文章
相关标签/搜索