ThinkPHP中获取器和修改器的使用

一、获取器

        获取器的作用是对模型实例的(原始)数据做出自动处理,也就是在模型对象进行查询后,对其获取到的数据进行一些自定义的设置,比如将获取到的time字段的值由时间戳自动转换为日期格式等等

        1、在模型中定义获取器:

                (1) 该方法必须为public修饰的

                (2) 方法名为 getFieldNameAttr ,其中FieldName为数据库表字段的驼峰转换

        2、自动触发获取器的场景

                (1) 模型对象的取值操作,也就是通过对象 $model->字段 的方式来获取值

                (2) 模型的序列化输出操作,也就是 $model->toArray() 和 toJson()方法

                (3) 直接显示调用getAttr方法, $this->getAttr('field_name');

        3、参数

                (1) 第一个参数传入的是当前字段的值

               (2)  第二个参数传入的是当前的所有数据数组

        4、在定义了获取器的情况下获取原始数据

                可以使用 $model->getData('字段名') 来获取

        5.举例

查询操作:return  Examination::where(['id'=>$params['id']])
            ->field('start_time')
            ->findOrEmpty()
            ->toArray();

此处在执行查询操作时,由于start_time字段在数据库中保存的是时间戳,而查询需要的是日期格式的"2024-6-21 14:50:00",若是不在模型中设置获取器,则要在每个需要获取时间的模块通过函数进行格式转换,而在模型中定义了获取器后,则可以直接通过访问字段,而不需要进行额外的格式转换,省去了重复的格式转换代码

定义获取器:public function getStartTimeAttr($value)
                {
                    return date('Y-m-d H:i:s', $value);
                }

二、修改器

        修改器则与获取器相反,它的主要作用是对模型设置的数据对象值进行处理,比如在进行数据库添加操作时,传入的start_time的值是期格式的"2024-6-21 14:50:00",而保存到数据库的值是时间戳,这种情况则可以通过修改器来进行设置

        1、定义修改器和传入的参数和获取器一样

        2、自动触发修改器的场景

                (1) 模型对象赋值操作,也就是    

Examination::create([
  
    'start_time'             => $params['start_time'],
   
]);

                (2) 调用模型的data方法,并且第二个参数传入true

                (3) 调用模型的appendData方法,并且第二个参数传入true

                (4) 调用模型的save方法,并且传入数据;

                (5) 显式调用模型的setAttr方法;

                (6) 显式调用模型的setAttrs方法,效果与appendData并传入true的用法相同;

        3、举例

Examination::create([
    'start_time' => strtotime($params['start_time']),
]);

在创建对象到数据库时,传入的参数为日期格式的"2024-6-21 14:50:00",但保存到数据库的值是时间戳,这种情况就可以在模型中设置修改器,而不是在create方法中再去添加转换函数,可以直接赋值:

'start_time'             => $params['start_time']
定义修改器:public function setStartTimeAttr($value)
{
    return strtotime($value);
}
 

总结:

获取器:在从数据库中取出数据,并将其展示给用户之前,可以对模型的属性进行格式化或处理

修改器:在将数据保存到数据库之前,可以对模型的属性进行格式化或处理

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值