扫一扫浏览

thinkphp5自动完成操作,两次运行的详解

精帖 未结贴
2 653
鸿哥站长未认证 2017-11-06 15:01:37
收藏

本人在用thinphp5初期,在数据自动完成  那里 调了坑 ,所以我在这里注明一下实际的用法与区别,特别是刚来接触,没有来得及看文档的小朋友们!

下面来详细讲一下自动完成与修改器的用法与区别

自动完成

定义:对数据进行插入、更新的时候进行字段的自动完成机制,例如用户在登录、注册时写入登录、注册的ip地址

namespace app\index\model;

use think\Model;

class User extends Model
{
    protected $auto = ['ip'];
    
    protected function setIpAttr()
    {
        return request()->ip();
    }
}

在对数据进行增加或更新的时候,会自动对ip字段进行赋值

注意:字段一定要是数据库里存在的字段

重点:上面的这种情况只是一种需求,还有另外一种就是在插入数据的时候,要对数据进行二次处理,例如把时间字符串转换成时间戳后再进行插入,怎么办? 一般想的是,就在自动完成里面转换就是。。。这就是让你晕的地方,这种情况就必须推荐用”修改器“

修改器

修改器方法的命名规范:

setFieldNameAttr

例如:

class User extends Model 
{
    public function setNameAttr($updatetime)
    {
        return strtotime($updatetime);
    }
}

怎么样,看上面是不是跟自动完成定义的简直没区别,是的,就是一样的,用心的同学就能看到,修改器没有属性字段指定,就是没有说明什么时候调用的字段属性protected......,修改器应用的场景跟触发情况 :

使用场景:

  • 时间日期字段的转换写入;

  • 集合或枚举类型的写入;

  • 数字状态字段的写入;

  • 某个字段涉及其它字段的条件或者组合写入;

触发情况:

  • 模型对象赋值;

  • 调用模型的data方法,并且第二个参数传入true;

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

  • 显式调用模型的setAttr方法;

  • 定义了该字段的自动完成;

官方提醒:数据自动完成仍然还是调用的修改器,要注意避免数据被两次处理的可能,自动完成定义的属性不要和表单提交的冲突。

看到了吧,自动完成定义 的属性不要和表单提交的冲突,什么意思?意思就是在进行数据自动完成的字段不要在”自动完成“前进行数据赋值,不然会执行两次自动完成的方法。

总结:

修改器,对数据进行后续处理的一种方式

自动完成,自动对数据进行填充的一种方式



  • 007 007 4
    2017-09-07 15:09:22

    正是我须要的

    回复
  • 黑白あ映像 黑白あ映像 35
    2017-12-25 17:04:12

    受教了,还好我看到了,不然我又要搞半天

    谢谢楼主

    回复
最近热帖 HOT TOPIC
TPFrame框架简介 1242
【全套视频】thinkphp5视频教程 1089
TPFrame安装说明 1065
TPFrame目录结构 949
tpframe之添加数据 902
tpframe基类介绍 899
TPFrame源码获取 829
TPFrame用户协议 767
TPFrame开发规范 767
TPFrame数据字典 739
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
为了框架的良性发展,tpframe招募成员了 4
新增的管理员没有权限操作CMS模块。 3
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
slide模块发布 2
透析thinkphp5升级版开发框架tpframe 2
爆料早知道:TPFrame v3.1已经发布,赶快下载体验吧!我有好想法