Форматирование дат в ActiveForm и в БД
Добавлено: 2018.03.18, 23:08
Здравствуйте. Намучался с этими датами, прошу помощи.
В таблице есть 2 поля created и updated с типом DATETIME (выбрал не Unix TimeStamp так как надо будет делать выборки за период)
При заполнении данных в форме эти два поля чисто для информации и они только для чтения.
далее при сохраненнии в модели есть стандартный бихейвор
При добавлении новой записи в таблицу пишутся правильные даты и время, в таком виде "2018-03-18 21:29:11", бихейвер отрабатывает.
Ну а в форме пользователю отображается тоже то что надо благодаря форматированию
в actionCreate
Тут вроде понятно.
Но вот при апдейте формы в экшене actionUpdate смотрю в логах такой вот запрос
Поле created при update запросе вообще не должно было затрагиваться, но так как в форме есть это поле со значением то оно затрагивается и естественно в таблицу в поле created не попадает ничего, потому что в запросе не тот формат даты и времени который нужен БД и в результате в created получается "0000-00-00 00:00:00". Ну тут понятно формат не тот, потому и нули в таблице.
Но после апдейта в поле updated попадает правильная дата в правильном формате но в форме в инпуте уже отображается "NOW()" если поле не форматировать, а если форматировать вот так
то в логах ошибка
Ну логично что форматтер не может это распарсить так как это строка "NOW()"
Почему после апдейта в таблицу попадает нужная дата, а в инпут формы тупо строка "NOW()" или ошибка? Может у меня подход к этому делу неправильный?
Если кто сможет помочь, тому большое спасибо
В таблице есть 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()" или ошибка? Может у меня подход к этому делу неправильный?
Если кто сможет помочь, тому большое спасибо