一、模型获取器
1、获取器的作用是对模型实例的数据做出自动处理
2、一个获取器对应模型的一个特殊方法,改方法为public
3、方法名的命名规范:getFieldAttr();
4、数据库表示状态status字段采用的是数值,而在页面上,我们需要输出status字段希望是中文,就可以使用获取器
5、在Studnets模型端,创建一个对外的方法
public function getStatusAttr($value)
{
$status=[-1=>'delete',0=>'save',1=>'正常']
return $status[$value];
}
//在控制器端,直接输出数据库字段的值即可得到获取器转换的对应值
$user=Students::find(20);
return $user->status;
6、除了getFieldAttr中field可以是字段值,也可以是自定义的虚拟字段
public function getNothingAttr($value,$data)
{
$myGet = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核'];
}
return $myGet[$data['status']];
7、注:Nothing这个字段不存在,而参数
v
a
l
u
e
只
是
为
了
占
位
,
并
未
使
用
,
第
二
个
参
数
value只是为了占位,并未使用,第二个参数
value只是为了占位,并未使用,第二个参数data得到的是帅选到的数据,最后得出最终值
8、如果定义了获取器,还想获取原始值,可以使用getData方法
return $user->getData('status');
9、直接输出无参数的getData(),可以得到原始值,而$user输出是改变后的
dump($user->getData());
dump($user);
10、使用withAttr在控制器端实现动态获取器,比如设置所有email大写
$user=Students::withAttr('email',function ($value) {
return strtoupper($value);
})->select();
return json($user);
11、使用withAttr在控制器端实现动态获取器,比如设置status翻译为中文
$user = UserModel::WithAttr('status', function ($value) {
$status = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核'];
return $status[$value];
})->select();
return json($user)
12、⭐同时定义了模型获取器和动态获取器,那么动态获取器优先级更高
二、模型修改器
1、模型修改器的作用,就是对模型设置对象的值进行处理
2、模型修改器的命名规则为setFieldAttr;
4、设置一个新增,规定邮箱的英文都必须大写:
public function setEmailAttr($value){
return strtoupper($value);
}
5、⭐模型修改器只对模型方法有效,调用数据库的方法是无效的