Yii2 TimestampBehavior无法正常工作

时间:2015-08-11 22:06:21

标签: php yii2

我正在使用最新版本的Yii框架(2.0.6)。我有Post Post与PostModel,在我的模型中,我需要正确设置created_atupdated_at属性。一旦我创建新帖子,两个值都被设置为当前时间戳,但是当我更新这篇文章时,它也会将表中的两个属性更新为当前时间,即使只应更新updated_at并且{{1应该保持不变。

created_at

这是另一个版本,但仍无效:

use yii\behaviors\TimestampBehavior;

public function behaviors() {
    return [
        [
                'class' => TimestampBehavior::className(),
        ],
        [
                'class' => SluggableBehavior::className(),
                'attribute' => 'name',
        ],
    ]; 
}

我也在使用MariaDB数据库。如果你能帮助我,我的代码发生了什么,我会非常感激。

1 个答案:

答案 0 :(得分:2)

首先,第二个代码段不正确,因为attributes数组并非设计为由用户设置。这是一种内在逻辑,您只需要设置createdAtAttributeupdatedAtAttribute属性。因此,默认情况下它们的名称为created_atupdated_at,因此如果您的命名相同,则可以像在第一个代码段中那样省略此声明。

最好明确添加它:

use yii\db\Expression;

...

`value` => new Expression('NOW()'),

要防止在更新期间更改created_at列值,您可以添加DEFAULT CURRENT_TIMESTAMP

以下是迁移的摘录:

use yii\db\Schema;

...

'created_at' => Schema::TYPE_TIMESTAMP . ' NOT NULL DEFAULT CURRENT_TIMESTAMP',
'updated_at' => Schema::TYPE_TIMESTAMP . ' NOT NULL',

有关详细信息,请参阅this related question

适用于MySQL,但我猜MariaDB是相同或非常相似的。