举杯邀月

yii2 编辑、发布数据时时间字段自动添加、更新

摘要:我们在添加数据时会有添加时间字段,更新记录时会有更新时间字段;数据库里很多字段都是一些通用有规律的字段,那么我们就可以把这些字段提出,利用行为自动完成

在我们添加数据的时候,往往会有添加添加和更新时间的字段,通常我们的写法是

$data['inputtime'] = $data['updatetime'] = time()
1
1

更新的时候再把更新的时间改掉

在yii2中有个TimestampBehavior行为是专门负责在添加、编辑数据的时候更新时间字段的,它默认的字段名为created_at,updated_at,类型为int(11)。

官方文档还规定:由于属性值会被这种行为自动设置,他们通常没有用户的输入,因此不应验证,即created_at和updated_at不应该出现在模型的rules()方法。

另外,如果我们的字段名不是他指定的字段名,我们可以在模型中自行修改,覆盖父类的behaviors方法:

方法需要继承TimestampBehavior行为

use  yii\behaviors\TimestampBehavior;

public function behaviors()
    {
        return [
            [
                'class' => TimestampBehavior::className(),
                'createdAtAttribute' => 'inputtime',  // 自己根据数据库字段修改
                'updatedAtAttribute' => 'updatetime', // 自己根据数据库字段修改
				'value' => tiem()
            ],
        ];
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13

另一种方式:

use yii\behaviors\AttributeBehavior;
public function behaviors()
    {
        return [
            [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    Article::EVENT_BEFORE_INSERT => ['create_time', 'update_time'],   //创建
                    Article::EVENT_BEFORE_UPDATE => ['update_time']       //修改
                ],
                'value' => time() //默认值
            ]
        ];
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14

方法中的value值可以根据自己的实际情况改成自己需要,可以是时间戳:time()、时间:date('Y-m-d H:i:s',time())

另外,这个时间行为只针对save方法,使用updateAll方法更新数据时时间无效

作者:举杯邀月

出处: http://www.hug-code.cn/archives/5fc0aef31eba2.html

2020-02-20 标签: phpyii2