Yii2 TimeStampBehaviour не работает

Я уже провел много часов, но пока не могу понять, в чем проблема. Я пытаюсь реализовать TimeStampBehaviour (а также Blamable, но ни один из них не работает сейчас). Мой модельный класс:

<?php

namespace common\models;

use Yii;
use yii\behaviors\BlameableBehavior;
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;
use yii\db\ActiveRecord;

/**
 * This is the model class for table "news".
 * .... property list
 */
class News extends \yii\db\ActiveRecord
{

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'news';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['title', 'short_description', 'content'], 'required'],
            [['content'], 'string'],
            [['title'], 'string', 'max' => 128],
            [['short_description'], 'string', 'max' => 255],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        // ... attribute label list
    }

    public function behaviors()
    {
        return [
            'timestamp' => [
                'class' => 'yii\behaviors\TimestampBehavior',
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
                ],
                'value' => new Expression('NOW()'),
            ],
            'blameable' => [
                'class' => BlameableBehavior::className(),
                'createdByAttribute' => 'created_by',
                'updatedByAttribute' => 'updated_by',
            ],          
        ];
    }

}

Я могу сохранить свою модель, каждое поле обновляется правильно, но created_at, updated_at, created_by, updated_by поля всегда пусты Моя таблица базы данных называется новостью, и она содержит 4 поля: created_at а также updated_at тип поля - DATETIME (я уже пробовал использовать временную метку INT и UNIX, но это не работает), а другой тип - INTEGER.

В чем может быть проблема? Я перепробовал все, что нашел с моим другом, Google.:) Спасибо.

Обновление № 1:

Действия по созданию и обновлению моего NewsController:

public function actionCreate()
{
    $model = new News;

    if ($model->load(Yii::$app->request->post()))
    {
        if($model->save()) {
            $this->redirect(array('index'));
        }
    }

    return $this->render('create',array(
        'model'=>$model,
    ));
}

public function actionUpdate($id)
    {
        $model = $this -> findModel ($id);

        if ($model->load(Yii::$app->request->post())) {
            if($model->save()) {
                $this->redirect(array('index'));
            }
        }

        return $this->render('update',array(
            'model'=>$model,
        ));
    }

Обновление № 2: я "случайно" заметил, что проблема существует, если я пытаюсь обновить свою модель. Я только что создал новую модель, и все четыре столбца заполнены правильными данными.

Обновление № 3:

protected function findModel($id)
{
    if (($model = News::findOne($id)) !== null) {
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

News структура таблицы: Структура таблицы новостей

1 ответ

Решение

Убедитесь, что вы действительно что-то меняете в полях своей модели, потому что если вы просто нажимаете кнопку "Сохранить" без каких-либо изменений, модель не обновляется в базе данных (в этом нет необходимости), и из-за этого TimestampBehavior не работает.

Другие вопросы по тегам