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.');
}
}
1 ответ
Убедитесь, что вы действительно что-то меняете в полях своей модели, потому что если вы просто нажимаете кнопку "Сохранить" без каких-либо изменений, модель не обновляется в базе данных (в этом нет необходимости), и из-за этого TimestampBehavior не работает.