我正在使用最新版本的Yii框架(2.0.6)。我有Post Post与PostModel,在我的模型中,我需要正确设置created_at
和updated_at
属性。一旦我创建新帖子,两个值都被设置为当前时间戳,但是当我更新这篇文章时,它也会将表中的两个属性更新为当前时间,即使只应更新updated_at
并且{{1应该保持不变。
created_at
这是另一个版本,但仍无效:
use yii\behaviors\TimestampBehavior;
public function behaviors() {
return [
[
'class' => TimestampBehavior::className(),
],
[
'class' => SluggableBehavior::className(),
'attribute' => 'name',
],
];
}
我也在使用MariaDB数据库。如果你能帮助我,我的代码发生了什么,我会非常感激。
答案 0 :(得分:2)
首先,第二个代码段不正确,因为attributes
数组并非设计为由用户设置。这是一种内在逻辑,您只需要设置createdAtAttribute
和updatedAtAttribute
属性。因此,默认情况下它们的名称为created_at
和updated_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是相同或非常相似的。