自定义Yii2 TimestampBehavior

时间:2017-06-06 08:25:57

标签: php yii2 yii2-model

我的模特中有行为

public function behaviors()
{
    return [
        [
            'class' => SluggableBehavior::className(),
            'attribute' => 'title',
            // 'slugAttribute' => 'slug',
        ],
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'created_at',
            'updatedAtAttribute' => 'updated_at',
            'value' => time(),
        ],
    ]; 
}

一切正常。但我需要只在一个动作中不起作用。 在actionView中有必要不更改“update_at”属性。我的动作查看:

$model = $this->findModel($id);
$model->views++;
$model->save();

如何尽可能正确地做到这一点?

2 个答案:

答案 0 :(得分:3)

使用:

$model->save(false, ['views']);

第一个参数确定是否应该运行验证(对于此示例,它不是必需的),第二个参数确定应保存的属性。

Yii2 ActiveRecord - save()Yii2 ActiveRecord - updateCounters()(更好)

答案 1 :(得分:1)

您可以使用特殊方法ActiveRecord::updateCounters()更新它。

$model = $this->findModel($id);
// Don't forget to check whether the model is null
if ($model !== null) {
    $model->updateCounters(['views' => 1]);
}