Установка формата даты по умолчанию для соединения с PostgreSQL в Laravel

Когда я пытаюсь получить список объектов модели Eloquent в формате JSON от моего контроллера Laravel, я сталкиваюсь с ошибкой:

 InvalidArgumentException in Carbon.php line 393:
Trailing data

Соответствующие части трассировки стека:

1. in Carbon.php line 393
2. at Carbon::createFromFormat('Y-m-d H:i:s', '2015-04-20 18:07:13.769') in Model.php line 2889
3. at Model->asDateTime('2015-04-20 18:07:13.769') in Model.php line 2392
4. at Model->attributesToArray() in Model.php line 2371

Кажется, что корень моей проблемы в том, что при сериализации модели в JSON она пытается проанализировать значение одного из столбцов метки времени, чтобы создать объект Carbon (который, я полагаю, затем будет преобразован обратно в строку), но он использует неправильный формат.

Строка формата исходит от Model::getDateFormat() который по умолчанию:

$this->getConnection()->getQueryGrammar()->getDateFormat()

и оказывается 'Y-m-d H:i:s' вместо того, что дает PostgreSQL, который 'Y-m-d H:i:s.u' (или что-то, не уверенный, взаимозаменяемы ли миллисекунды и микросекунды, как это). Конечно, можно просто переопределить getDateFormat() во всех моих модельных классах, но это раздражает (и не совсем подходит для этого, поскольку модель должна быть достаточно независимой от базы данных), даже если я просто хочу, чтобы все они наследовали от базового класса. Есть ли способ установить формат даты грамматики запроса вместо этого? Похоже, это должно быть возможно через файл конфигурации базы данных, но я не смог найти ничего в документации по этому поводу.

0

Решение

Не совсем через конфигурационные файлы БД, но вы могли бы посоветовать Postgres вообще не сохранять миллисекунды в базе данных:

ALTER TABLE {tablename} ALTER updated_at SET DATA TYPE timestamp(0) without time zone;

Другой вариант — переопределить класс PostgresGrammar и его метод getDateFormat (), но он не работал для меня на laravel 4.2.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]