lbondodesc
@lbondodesc
PHP Developer

Yii2. Как хранить и пользоваться датой в конкретном формате?

Привет! Задал формат даты по всему проекту
'formatter' => [
	        'dateFormat' => 'dd-mm-yyyy',
   		],

Им и пользуюсь (Формыб валидацииб грид), но при сохранении в БД возникает ошыбка

atabase Exception – yii\db\Exception

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '18-03-2015' for column 'lock_start' at row 1
The SQL being executed was: INSERT INTO `reservation` (`id_room`, `lock_start`, `lock_finish`, `notes`, `is_cancel`, `cleaning_day`, `group_t`) VALUES (5, '18-03-2015', '27-03-2015', '', NULL, NULL, '')

Т.е Mysql принимает только формат yyyy-mm-dd.
Как быть в даной ситуации? Может какой то фильтр использовать при сохрании?!
  • Вопрос задан
  • 3260 просмотров
Решения вопроса 1
Zhuravljov
@Zhuravljov
php-программист
Для вывода даты в вашем формате используйте:
echo Yii::$app->formatter->asDate($model->lock_start);

Метод asDate распознает строку с датой в формате mysql и вернет строку с датой в формате из конфига.

Для передачи модели в форму нужны будут небольшие танцы с бубном:
public function actionUpdate($id)
{
    $model = $this->findModel($id);
    // Приводим дату к пользовательскому формату
    $model->lock_start = Yii::$app->formatter->asDate($model->lock_start);
    // Ставим обработчик который после успешной проверки данных в пользовательском формате вернет дату в формат для mysql
    $model->on(ActiveRecord::EVENT_BEFORE_UPDATE, function () use ($model) {
        $model->lock_start = \DateTime::createFromFormat('d-m-Y', $model->lock_start)->format('Y-m-d');
    });
    // Дальше стандартный код
    if ($model->load(Yii::$app->request->post())) {
        if ($model->save()) {
            return $this->redirect(['index']);
        }
    }
    return $this->render('update', [
        'model' => $model,
    ]);
}


Всю эту последовательность можно вынести в отдельный метод модели, или подключать через behavior.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@retvizan
Причем здесь формат даты?
Внимательно прочитайте сообщение об ошибке.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы