扫一扫浏览

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

精帖 未结贴
2 1082
鸿哥站长未认证 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隐藏默认模块的一些问题 1483
【全套视频】thinkphp5视频教程 1437
教你如果处理高并发数据不同步的问题php篇 1232
tpframe安装教程 1184
TPFrame框架robot模块重磅来袭,内附2.1版本 1178
tpframe新建主题 1155
父元素flex之后,子元素高度自适应问题 1133
tpframe应用目录结构 1103
slide模块发布 1092
thinkphp5自动完成操作,两次运行的详解 1082
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 3
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
爆料早知道:TPFrame v3.2版本已更新我有好想法