扫一扫浏览

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

精帖 未结贴
2 302
鸿哥站长未认证 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
【全套视频】thinkphp5视频教程 548
TPFrame框架简介 430
TPFrame框架robot模块重磅来袭,内附2.1版本 384
TPFrame安装说明 360
TPFrame目录结构 343
TPFrame 2.1 beta版本正式发布,全部插件式开发到来 329
thinkphp5自动完成操作,两次运行的详解 302
slide模块发布 302
tpframe基类介绍 293
tpframe之添加数据 282
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 8
关于tpframe的一点话题 6
为了框架的良性发展,tpframe招募成员了 4
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
slide模块发布 2
透析thinkphp5升级版开发框架tpframe 2
微信公众号支付一些容易遇坑的地方 1
用了那么久的SVN,你都知道了些什么 1
爆料早知道:文档中心文档已更新我有好想法