Как обрабатывать нулевые даты MySQl, возвращающие «-0001-11-30 00:00:00»

Когда мои даты MySQl равны нулю, PHP возвращает их как «-0001-11-30 00:00:00».

Я знаю, что это потому, что я использую часовой пояс Европы, но как я могу справиться с этим?

Я продолжаю получать:

InvalidArgumentException in Carbon.php line 425:
Unexpected data found.
in Carbon.php line 425
at Carbon::createFromFormat('Y-m-d H:i:s', '-0001-11-30 00:00:00') in Model.php line 2915

Как я могу это исправить?

Мик

NB: это отличается от: Как вы объясните результат для нового \DateTime('0000-00-00 00:00:00')?

Это другое, потому что я спрашиваю, что я должен с этим делать.


person Mick    schedule 24.03.2016    source источник
comment
Возможный дубликат Как вы объясните результат для нового \DateTime('0000-00-00 00:00:00')?   -  person Dylan Su    schedule 24.03.2016
comment
Это не имеет ничего общего с часовыми поясами (европейскими или другими), и все, что связано с тем, как PHP DateTime будет интерпретировать пустое значение даты   -  person Mark Baker    schedule 24.03.2016
comment
Отлично, так как мне предотвратить ошибку?   -  person Mick    schedule 24.03.2016
comment
Я предполагаю, что вам придется написать функцию, которая распознает нулевые значения на основе часового пояса и устанавливает для них значение null   -  person Phate01    schedule 24.03.2016


Ответы (1)


Основываясь на этом замечательном ответе: https://stackoverflow.com/a/19075291/4499267 в пункте 8) говорится, что

MySQL сохраняет «0000-00-00 00:00:00», если вы установили столбец даты и времени как NULL, если только вы специально не установили для столбца разрешение null при его создании.

Таким образом, это может быть решением для создания таблицы с нулевым столбцом даты и времени.

person Phate01    schedule 24.03.2016
comment
Похоже, это должно работать, но я все равно получаю ту же ошибку, когда пытаюсь превратить коллекцию в массив: в строке Carbon.php 425 в Carbon::createFromFormat('Y-m-d H:i:s', '-0001 -11-30 00:00:00') в строке 2915 Model.php в Model-›asDateTime('-0001-11-30 00:00:00') в строке 2435 Model.php в Model-›attributesToArray() в Model.php строка 2412 в Model->toArray() в Collection.php строка 969 - person Mick; 24.03.2016
comment
Не могли бы вы опубликовать скрипт, который генерирует ошибку? Попробуйте также var_dump() значение, которое возвращает MySQL - person Phate01; 24.03.2016
comment
Просто: //products — это коллекция Elastiquent collection, которая должна быть массивом $arrProducts = $products-›toArray(); - person Mick; 24.03.2016
comment
Я понял. Если ваш столбец даты не допускал пустых значений, mysql сохранял их как 0000-00-00 00:00:00. Теперь, если вы изменили его, чтобы разрешить нули, эти значения по-прежнему будут 0000-00-00 00:00:00. Вам придется вручную установить их на NULL - person Phate01; 24.03.2016
comment
Я удалил все строки, изменил БД, затем снова добавил строки. Однако! Я использую Elastic Search, и мне пришлось удалить индекс, а затем снова добавить все записи. Похоже, это работает! Спасибо - person Mick; 24.03.2016
comment
Спасибо за вашу помощь. Я буду избегать этой проблемы в будущем, всегда разрешая нули. - person Mick; 24.03.2016