获取器
获取器用于对模型数据进行处理后再返回,适用于需要格式化展示的场景。
命名规则
获取器的命名规则为getFieldNameAttr,其中FieldName为数据表字段的驼峰转换,Attr为固定后缀。
转换规则
在ThinkPHP框架中,数据表字段名与获取器方法名之间存在明确的命名转换规则:
转换示例
| 数据表字段名(小写加下划线) | 获取器方法名(驼峰命名) |
|---|---|
status_text | getStatusTextAttr |
gender_text | getGenderTextAttr |
is_adult | getIsAdultAttr |
goods_cover_thumb_small | getGoodsCoverThumbSmallAttr |
转换过程
将下划线分隔的字段名转换为驼峰命名:
status_text→StatusText
添加前缀
get和后缀Attr:StatusText→getStatusTextAttr
在调用获取器时,使用原始的小写加下划线字段名:
php$user = User::find(1); echo $user->status_text;
框架内部会自动处理这种命名转换,将字段名转换为对应的获取器方法名并调用。
状态文本获取器
php
/**
* 获取器:用户状态文本
* @param $value
* @param $data
* @return string
*/
public function getStatusTextAttr($value, $data)
{
$status_map = [
0 => '禁用',
1 => '启用'
];
return isset($status_map[$data['status']]) ? $status_map[$data['status']] : '未知';
}使用方式:
php
$user = User::find(1);
echo $user->status_text; // 输出:"启用" 或 "禁用"性别文本获取器
php
/**
* 获取器:性别文本
* @param $value
* @param $data
* @return string
*/
public function getGenderTextAttr($value, $data)
{
$gender_map = [
0 => '未知',
1 => '男',
2 => '女'
];
return isset($gender_map[$data['gender']]) ? $gender_map[$data['gender']] : '未知';
}使用方式:
php
$user = User::find(1);
echo $user->gender_text; // 输出:"男"、"女" 或 "未知"业务逻辑获取器
php
/**
* 获取器:是否成年
* @param $value
* @param $data
* @return bool
*/
public function getIsAdultAttr($value, $data)
{
return isset($data['age']) && $data['age'] >= 18;
}使用方式:
php
$user = User::find(1);
if ($user->is_adult) {
// 执行成年用户相关逻辑
}封面缩略图获取器
php
/**
* 获取器:封面缩略图
*/
public function getGoodsCoverThumbSmallAttr($value, $data)
{
if (isset($data[ 'goods_cover' ]) && $data[ 'goods_cover' ] != '') {
return get_thumb_images($data[ 'site_id' ], $data[ 'goods_cover' ], FileDict::SMALL);
}
return [];
}使用方式:
php
$field = 'goods_cover';
$list = $this->model->field($field)->append([ 'goods_cover_thumb_small', 'goods_cover_thumb_mid' ])->select()->toArray();在查询时,数据会自动转换类型,如图所示: 
注意
必须查询原有字段,才能进行字段转换,否则会报错
