Driver86
@Driver86
Немодератор toster.ru

Как работает TimestampBehavior, если поле уже заполнено?

public function behaviors()
    {
        return [
            [
                'class' => TimestampBehavior::className(),
                'createdAtAttribute' => 'createdAt',
                'updatedAtAttribute' => 'updatedAt',
                'value' => new Expression('NOW()'),
            ],
        ];
    }


Допустим, делается второй раз findOne модели, а потом её save. В этом случае $model->updatedAt уже имеет не null значение. Behavior его проигнорирует и сохранит NOW, либо будет сохранено то, как есть?
И второй вопрос, зависимый от ответа на первый: как сохранить заданное значение, не NOW (не то, что завязано на Behavior).
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
Driver86
@Driver86 Автор вопроса
Немодератор toster.ru
Понятно.
Гайки там закручены наглухо - ставится value, прописанное в behavior.
detachBehavior решает второй вопрос
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
При update будет сохранен в updated_at текущий timestamp. Свое значение можно передать функцией, либо строкой:
[
                'class' => TimestampBehavior::className(),
                'value' => date('Y.m.d H:i'),
            ],

            [
                'class' => TimestampBehavior::className(),
                'value' => function($event) {
                    return date('Y.m.d H:i');
                },
            ],
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы