yii2自动更新时间

缺乏、安全感 2022-09-30 00:53 275阅读 0赞

比如在我们的文章表中,有create_time和update_time两个字段,在yii里面,不用我们每次都去更新他们,可以利用Yii的行为更新时间。
在对应的model引入use yii\behaviors\TimestampBehavior;,利用TimestampBehavior这个类处理。
然后定义model的behaviors

  1. public function behaviors() {
  2. return [
  3. [
  4. 'class' => TimestampBehavior::className(),
  5. 'attributes' => [
  6. # 创建之前
  7. ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'],
  8. # 修改之前
  9. ActiveRecord::EVENT_BEFORE_UPDATE => ['update_time']
  10. ],
  11. #设置默认值
  12. 'value' => time()
  13. ]
  14. ];
  15. }

观察yii\behaviors\TimestampBehavior 的源码可以看见。定义了两个变量,created_at和updated_at。
假设数据库中的创建时间字段和更新时间字段都是这个名。
可以直接在behaviors方法里面写以下代码

  1. return [
  2. TimestampBehavior::className();
  3. ]

此时我们用模型更新和新建数据的时候就就会自动更新两个字段了。

再次查看yii\behaviors\BlameableBehavior 里面有两个属性,created_by和updated_by,意如其名,是用来记录某一列数据的更新者和创建者,同样假设数据中已经有这两个字段了。
我们只需要在模型的behaviors方法引入他就能自动更新这两个字段。

  1. return [
  2. BlameableBehavior::className();
  3. ]

这里的字段名也可以自己自定义。写一个类继承自这个class类,里面定义和父类同样的变量名,设置为自己想要的值,我们引用自己定义的类,就实现了自定义字段名。

发表评论

表情:
评论列表 (有 0 条评论,275人围观)

还没有评论,来说两句吧...

相关阅读

    相关 yii2时间范围查询

    1.时间范围这个应该都不陌生 但是你要注意你的模型里面只有你数据库的规定字段,现在你需要的是通过两个值即两个字段去查询这一个值所在的范围 2.那么就需要你在模型中定义两

    相关 ORACLE----TimeStamp(时间戳)自动更新

    之前对id的自增长进行了设置,原以为时间戳的更新也类似,使用序列之类的,但最终发现跟序列没半毛钱关系。触发器是肯定要用的,但编写脚本也是需要的。 (1)创建触发器 ![