Laravel Заводское неправильное значение даты и времени - PullRequest
1 голос
/ 08 мая 2020

В Laravel Factory у меня есть:

'created_at' => now()->subDays(mt_rand(1,90))->subHours(mt_rand(1,23))->toDateTimeString()

Это раньше работало нормально, я думаю, что это было на Laravel 7.2. Под словом «работал нормально» я имею в виду, что я запускал это, чтобы вставить 10.000 или более строк, и он никогда не выходил из строя. После обновления до 7.10.3 я получаю следующую ошибку:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2020-03-29 02:10:11' for column 'created_at'

Он действительно вставляет несколько сотен строк до сбоя, поэтому, похоже, это указанная c дата или время, которые не работают. Из фактически вставленных строк некоторые также имеют дату 2020-03-29, а некоторые имеют время 02:10:11, поэтому я не знаю, почему это «недопустимый формат».

1 Ответ

2 голосов
/ 09 мая 2020

29 марта 2020 года в Европе перешло на летнее время (DST). Я предполагаю, что вы находитесь в часовом поясе Центральноевропейского времени (CET), где время перемещается на 1 час с 2 утра до 3 ночи, поэтому не было 2:10 утра, что делает ваше datetime недействительным.

У вас есть параметры пары:

  1. Вы можете обновить свою базу данных / сервер базы данных, чтобы использовать UT C.
  2. Вы можете обновить Laravel часовой пояс приложения в соответствии с часовым поясом сервера базы данных (app.timezone config).
  3. Вы можете обновить фабрику так, чтобы она вызывала setTimezone(/* db timezone */) в экземпляре Carbon перед преобразованием его в строку (это гарантирует, что Carbon не создаст недопустимую дату и время для часового пояса базы данных).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...