本人在用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......,修改器应用的场景跟触发情况 :
使用场景:
时间日期字段的转换写入;
集合或枚举类型的写入;
数字状态字段的写入;
某个字段涉及其它字段的条件或者组合写入;
触发情况:
官方提醒:数据自动完成仍然还是调用的修改器,要注意避免数据被两次处理的可能,自动完成定义的属性不要和表单提交的冲突。
看到了吧,自动完成定义 的属性不要和表单提交的冲突,什么意思?意思就是在进行数据自动完成的字段不要在”自动完成“前进行数据赋值,不然会执行两次自动完成的方法。
总结:
修改器,对数据进行后续处理的一种方式
自动完成,自动对数据进行填充的一种方式