我使用的是最新版本的Yii框架(2.0.6)。我有表Post与PostModel和在我的模型中,我需要设置正确的created_at
和updated_at
属性。只要我创建新的帖子,两个值都设置为当前时间戳,但是当我更新这个帖子时,它也会将表中的两个属性更新为当前时间,即使只有updated_at
应该更新,created_at
应该保持不变。
use yii'behaviors'TimestampBehavior;
public function behaviors() {
return [
[
'class' => TimestampBehavior::className(),
],
[
'class' => SluggableBehavior::className(),
'attribute' => 'name',
],
];
}
这是另一个版本,但仍然不能工作:
public function behaviors()
{
return [
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => [
'yii'db'ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
'yii'db'ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
],
[
'class' => SluggableBehavior::className(),
'attribute' => 'title',
],
];
}
我也使用MariaDB数据库。如果你能帮助我,我的代码是怎么回事,我将非常感激。
首先,第二个代码片段是不正确的,因为attributes
数组不是由用户设置的。这是一种内部逻辑,你只需要设置createdAtAttribute
和updatedAtAttribute
属性。因此,它们默认被命名为created_at
和updated_at
,所以如果您的命名相同,您可以像在第一个代码片段中那样省略此声明。
最好也显式地添加这个:
use yii'db'Expression;
...
`value` => new Expression('NOW()'),
为了防止在更新过程中更改created_at
列的值,可以添加DEFAULT CURRENT_TIMESTAMP
。
下面是来自migration的代码片段:
use yii'db'Schema;
...
'created_at' => Schema::TYPE_TIMESTAMP . ' NOT NULL DEFAULT CURRENT_TIMESTAMP',
'updated_at' => Schema::TYPE_TIMESTAMP . ' NOT NULL',
详情请参阅相关问题
这是MySQL,但我猜对于MariaDB是相同或非常相似的