Yii2 如何将上次\u更新的列默认设置更新为当前\u时间戳?

Yii2 如何将上次\u更新的列默认设置更新为当前\u时间戳?,yii2,crud,Yii2,Crud,我正在使用Gii生成的积垢。在phpmyadmin中有一列last_updated,默认设置为CURRENT_TIMESTAMP 当我创建行时,它使用当前日期和时间 但当我更新该行时,它将使用上一个日期和时间date n time来更新该行 我想,当我更新行时,它应该是当前日期n时间? 如何实现这一点?您可以将其设置为: $model->updated_at = time(); 或 使字段获得当前时间戳 将此行为添加到您的模型中。或者创建一个扩展到所有模型的通用模型并将其添加到该模型中。

我正在使用Gii生成的积垢。在phpmyadmin中有一列last_updated,默认设置为CURRENT_TIMESTAMP

当我创建行时,它使用当前日期和时间

但当我更新该行时,它将使用上一个日期和时间date n time来更新该行

我想,当我更新行时,它应该是当前日期n时间? 如何实现这一点?

您可以将其设置为:

$model->updated_at = time();


使字段获得当前时间戳

将此行为添加到您的模型中。或者创建一个扩展到所有模型的通用模型并将其添加到该模型中。因此,您不需要在所有模型中重写

    public function behaviors() {

    return[
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'created_at',
            'updatedAtAttribute' => 'updated_at',
            'value' => date('Y-m-d H:i:s'),
        ],
    ];
}

在ActiveRecord中,在保存之前扩展函数,如下所示:

public function beforeSave($insert) {
    //...
    $this->last_updated = time();
    return parent::beforeSave($insert);
}
或者,正如Saberi指出的,TimestampBehavior可以用于将当前时间戳填充到活动记录的属性中。使用此代码作为保存过程的一部分执行此操作,类似于调用beforeSave:

use yii\db\Expression;

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'updatedAtAttribute' => 'last_updated',
            'value' => new Expression('NOW()'),
        ],
    ];
}
或者,使用$model->touch'last_updated';只需更新现有记录的时间戳


请参见

请确保已附加时间戳行为,否则方法触摸不可用。
use yii\db\Expression;

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'updatedAtAttribute' => 'last_updated',
            'value' => new Expression('NOW()'),
        ],
    ];
}