Thinkphp 6.0模型的获取器和修改器

文章介绍了模型中的获取器和修改器的用法。获取器用于在读取数据时自动处理,如将状态数字转换为中文描述;修改器则在设置数据时起作用,例如确保新增邮箱为大写。动态获取器可以在控制器层面实现,具有较高优先级。模型修改器只在模型方法中生效,不影响直接的数据库操作。
摘要由CSDN通过智能技术生成

本节课我们来学习模型中操作比较方便的获取器和修改器。

一.模型获取器

1. 获取器的作用是对模型实例的数据做出自动处理;

2. 一个获取器对应模型的一个特殊方法,该方法为 public;

3. 方法名的命名规范为:getFieldAttr();

4. 举个例子,数据库表示状态 status 字段采用的是数值;

5. 而页面上,我们需要输出 status 字段希望是中文,就可以使用获取器;

6. 在 User 模型端,我创建一个对外的方法,如下:

public function getStatusAttr($value)
{
    $status = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核'];
    return $status[$value];
}

7. 然后,在控制器端,直接输出数据库字段的值即可得到获取器转换的对应值;

$user = UserModel::find(19);
return $user->status;

8. 除了 getFieldAttr 中 Field 可以是字段值,也可以是自定义的虚拟字段;

public function getNothingAttr($value, $data)
{
    $myGet = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核'];
    return $myGet[$data['status']];
}
return $user->nothing;

9. Nothing 这个字段不存在,而此时参数$value 只是为了占位,并未使用;

10. 第二个参数$data 得到的是筛选到的数据,然后得到最终值;

11. 如果你定义了获取器,并且想获取原始值,可以使用 getData()方法;

return $user->getData('status');

12. 直接输出无参数的 getData(),可以得到原始值,而$user 输出是改变后的;

dump($user->getData());
dump($user);

13. 使用 WithAttr 在控制器端实现动态获取器,比如设置所有 email 为大写;

$user = UserModel::WithAttr('email', function ($value) {
    return strtoupper($value);
})->select();
return json($user);

14. 使用 WithAttr 在控制器端实现动态获取器,比如设置 status 翻译为中文;

$user = UserModel::WithAttr('status', function ($value) {
$status = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核'];
    return $status[$value];
})->select();
return json($user);

15. 同时定义了模型获取器和动态获取器,那么动态获取器优先级更高;

二.模型修改器

1. 模型修改器的作用,就是对模型设置对象的值进行处理;

2. 比如,我们要新增数据的时候,对数据就行格式化、过滤、转换等处理;

3. 模型修改器的命名规则为:setFieldAttr;

4. 我们要设置一个新增,规定邮箱的英文都必须大写,修改器如下:

public function setEmailAttr($value)
{
    return strtoupper($value);
}

5. 除了新增,会调用修改器,修改更新也会触发修改器;

6. 模型修改器只对模型方法有效,调用数据库的方法是无效的,比如->insert();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值