created_at VS updated_at

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

created_at VS updated_at

Сообщение NEIRON »

Есть стандартное поведение во многих моделях:

Код: Выделить всё

public function behaviors()
    {
        return [
            'timestamp' => [
                'class' => TimestampBehavior::className(),
                'createdAtAttribute' => 'created_at',
                'updatedAtAttribute' => 'updated_at',
                'value' => function () {
                    return date('U');
                },
            ],
            [
                'class' => BlameableBehavior::className(),
                'createdByAttribute' => 'created_by',
                'updatedByAttribute' => 'updated_by',
            ],
        ];
    }
Но при создании (CREATE), оно прописывает и поля UPDATED_AT и UPDATED_BY, хотя вроде явно указаны атрибуты, которые нужно записывать при создании, а которые при изменении.
В идеале в БД хотелось бы видеть, когда запись была создана и кем, и если не изменялась, то поля UPDATED_AT и UPDATED_BY должны быть пустыми. Спасибо.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: created_at VS updated_at

Сообщение unknownby »

Так пробовали?

Код: Выделить всё

'TimestampBehavior' => [
	'class' => TimestampBehavior::className(),
	'attributes' => [
		ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
		ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
	],
	'value' => function () {
		 return date('U');
	},
],
BlameableBehavior по аналогии должен работать :)

Код: Выделить всё

'BlameableBehavior' => [
	'class' => BlameableBehavior::className(),
	'attributes' => [
		ActiveRecord::EVENT_BEFORE_INSERT => ['created_by'],
		ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_by'],
	],
	'value' => function () {
		return \Yii::$app->user->identity->getAuth('id');
	}
],
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: created_at VS updated_at

Сообщение NEIRON »

unknownby писал(а): 2020.01.21, 13:16 Так пробовали?

Код: Выделить всё

public function behaviors()
    {
        return [
            'TimestampBehavior' => [
                'class' => TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
                ],
                'value' => function () {
                    return date('U');
                },
            ],
            'BlameableBehavior' => [
                'class' => BlameableBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_by'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_by'],
                ],
                'value' => function () {
                    return \Yii::$app->user->identity->getId();
                },
            ]
        ];
    }
Да, спасибо, вот так помогло
Ответить