Установка формата даты по умолчанию для соединения 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() во всех моих классах моделей, но это раздражает (и не совсем правильное место для этого, так как модель должна быть достаточно независимой от базы данных), даже если я просто наследую их от базового класса. . Есть ли способ вместо этого установить формат даты грамматики запроса? Похоже, это должно быть возможно через файл конфигурации базы данных, но я ничего не нашел в документации по этому поводу.


person JaredL    schedule 21.04.2015    source источник


Ответы (1)


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

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

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

person austerlitz    schedule 28.07.2015