thinkphp6.0模型篇之模型的获取器和修改器

本文介绍了ThinkPHP6.0框架中模型的获取器和修改器。获取器用于自动处理模型实例的数据,如将status字段转换为中文。模型修改器则在设置对象值时进行处理,例如确保邮箱为大写。动态获取器在控制器端可实现如email大写或status字段中文翻译,且动态获取器优先级高于模型获取器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模型获取器

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、⭐模型修改器只对模型方法有效,调用数据库的方法是无效的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值