一、模型获取器
获取器的作用是对模型实例的数据做出自动处理。一个获取器对应模型一个特殊方法,该方法为 public,方法名的命名规范为:getFieldAttr();比如,数据库表示状态 status 字段采用的是数值,我们需要输出 status 字段希望是中文,就可以使用获取器,在User 模型端,创建一个对外的方法。
public function getStatusAttr ( $value )
{
$status = [ - 1 => '禁用' , 1 => '正常' , 0 => '待审核' ] ;
return $status [ $value ] ;
}
$user = UserModel :: find ( 19 ) ;
echo $user [ 'status' ] ;
自定义虚拟字段
public function getNothingAttr ( $value , $data )
{
$myGet = [ - 1 => '禁用' , 1 => '正常' , 0 => '待审核' ] ;
return $myGet [ $data [ 'status' ] ] ;
}
return $user -> nothing ;
定义获取器,并且想获得原始值,使用 getData() 方法;
return $user -> getData ( 'status' ) ;
$user -> getData ( ) ;
withAttr 在控制器端实现动态获取器,这个优先级大于模型获取器;比如设置所有 email 为大写
$user = UserModel :: WithAttr ( 'email' , function ( $value ) {
return strtoupper ( $value ) ;
} ) -> select ( ) ;
二、模型修改器
模型修改器的作用,就是对模型设置对象的值进行处理,比如我们新增数据的时候,对数据就进行了格式化、过滤,转换等处理,模型修改器命名规则为:setFieldAttr(),新增,修改会触发修改。模型修改器只对模型方法有效,调用数据库的方法是无效的,比如-> insert();
public function setEmailAttr ( $value )
{
return strtoupper ( $value ) ;
}