0

当我尝试从我的 Laravel 控制器中获取 JSON 格式的 Eloquent 模型对象列表时,我遇到了一个错误:

 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()我所有的模型类,但这很烦人(而且不是真正的正确位置,因为模型应该是相当独立于数据库的),即使我只是让它们都继承自基类。有没有办法设置查询语法的日期格式?似乎应该可以通过数据库配置文件来实现,但我在文档中找不到任何关于此的内容。

4

1 回答 1

2

不完全是通过 db 配置文件,但你可以考虑告诉 Postgres 不要在数据库中保存毫秒:

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

另一种选择是覆盖 PostgresGrammar 类及其 getDateFormat() 方法,但它在 laravel 4.2 上对我不起作用

于 2015-07-28T15:10:29.940 回答