跟老姚学前端,课程体系更完善,10%基础 + 90%实战演练,快人一步学编程

扫一扫浏览

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

精帖 未结贴
2 6785
鸿哥站长未认证 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视频教程 87321
父元素flex之后,子元素高度自适应问题 10994
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 10171
thinkphp5隐藏默认模块的一些问题 9540
api接口文档插件easydoc的基本用法,快速搞定接口文档 9495
omnicore rpc api中文手册【usdt】 9327
PHP如何判断字符串是否为json格式 9240
教你如果处理高并发数据不同步的问题php篇 9081
关于thinkphp5.0.x getshell漏洞的说明 8897
使用宝塔linux面板创建FTP无法连接的解决办法(阿里云或腾讯云) 8778
月度热议HOT COMMENTS
【全套视频】thinkphp5视频教程 71
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
透析thinkphp5升级版开发框架tpframe 3
新增的管理员没有权限操作CMS模块。 3
爆料早知道: