ThinkPHP5开发连载五十四之模型-数据完成

上一篇文章讲解“模型-类型转换”,本篇文章讲解“模型-数据完成”。

数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库。

系统支持auto、insert和update三个属性,可以分别在写入、新增和更新的时候进行字段的自动完成机制,auto属性自动完成包含新增和更新操作,例如我们定义User模型类如下:

注意:

1. 数据自动完成如果需要写入固定的值,可以直接指定(例如上面的status字段固定写入了1),类似于数据表字段的默认值功能。

为了测试数据完成,我们在user表中添加三个字段,分别为sex(性别)、status(状态)、ip(用户登录的ip)。

新建User模型,并在模型中设置数据完成

新建Index控制器,并在控制器中新建添加方法

浏览器访问后,查看数据库

由于sex、status、ip三个字段在添加时自动完成,那么在添加数据时,会自动向数据库中添加数据。

ip如果为0.0.0.0,是因为访问时使用的ip为localhost,换成127.0.0.1即可。

新建更新方法,测试更新时自动完成的cid字段,更新上一条插入的数据即可

浏览器访问后,查看数据库

注意:

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

2. 注意数据自动完成和修改器的区别:

主要区别为是否需要传入数据:

修改器需要传入数据,并对数据进行系统化规范处理

自动完成无需传入数据,是对某字段自动的数据完成

数据完成需要配合修改器使用,在使用过程中要注意避免数据被两次处理的可能,自动完成定义的属性不要和表单提交的冲突,自动完成定义的属性与表单提交的相同时,会出现数据被两次处理的可能,导致数据错误。

以下用例子进行说明:

【例】当自动完成定义的属性与表单提交的相同时。

在user表中添加password密码字段,用此字段进行验证

在User模型中,设置password字段的自动完成。

在Index控制器中,新建addPwd方法,测试自动完成定义的属性与表单提交的相同时可能出现的问题。

浏览器访问

注意:

1. 表单提交的数据为字段赋值时触发修改器,执行save时触发自动完成,因此执行了两边的md5加密,即使数据用数组保存,再传入save方法,修改器在save也会触发,详见修改器的触发条件。

2. 当自动完成定义的属性与表单提交的相同时,如果返回的是固定值,不会出错,如果是对数据的重新处理,会导致数据的错误,为了避免问题的发生,因此避免自动完成定义的属性与表单提交的相同。

ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员

关注卓象程序员,定期发布技术文章

下一篇讲解“模型-查询范围”

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180920A14IWB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券