В таблице есть 2 поля created и updated с типом DATETIME (выбрал не Unix TimeStamp так как надо будет делать выборки за период)
При заполнении данных в форме эти два поля чисто для информации и они только для чтения.
Код: Выделить всё
<?= $form->field($model, 'created')->textInput([
'maxlength' => true,
'readonly'=> true,
'value' => Yii::$app->formatter->asDatetime($model->created, 'php:d.m.Y H:i:s'),
])
?>
<?= $form->field($model, 'updated')->textInput([
'maxlength' => true,
'readonly'=> true,
'value' => Yii::$app->formatter->asDatetime($model->updated, 'php:d.m.Y H:i:s'),
])
?>
Код: Выделить всё
public function behaviors()
{
return [
[
'class' => 'yii\behaviors\TimestampBehavior',
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created', 'updated'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated'],
],
'value' => function () {
$date = new Expression('NOW()');
return $date;
}
],
];
}
Ну а в форме пользователю отображается тоже то что надо благодаря форматированию
в actionCreate
Код: Выделить всё
$date = new DateTime();
$model->created = Yii::$app->formatter->asDatetime($date,'php:d.m.Y H:i:s');
$model->updated = Yii::$app->formatter->asDatetime($date,'php:d.m.Y H:i:s');
Но вот при апдейте формы в экшене actionUpdate смотрю в логах такой вот запрос
Код: Выделить всё
UPDATE `products` SET `created`='18.03.2018 20:33:38', `updated`=NOW(), `code`='111', `is_active`=1 WHERE `id`='1'
Но после апдейта в поле updated попадает правильная дата в правильном формате но в форме в инпуте уже отображается "NOW()" если поле не форматировать, а если форматировать вот так
Код: Выделить всё
Yii::$app->formatter->asDatetime($model->updated, 'php:d.m.Y H:i:s'),
Код: Выделить всё
Exception: DateTime::__construct(): Failed to parse time string (NOW()) at position 3 ((): Unexpected character in
Почему после апдейта в таблицу попадает нужная дата, а в инпут формы тупо строка "NOW()" или ошибка? Может у меня подход к этому делу неправильный?
Если кто сможет помочь, тому большое спасибо