当我尝试从我的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()
,但这很烦人(并不是真正适合它的地方,因为模型应该是相当独立于数据库的),即使我只是让它们都继承自基类。有没有办法设置查询语法的日期格式?似乎应该可以通过数据库配置文件,但我无法在文档中找到任何关于此的内容。
答案 0 :(得分:2)
不完全是通过db配置文件,但你可能会考虑告诉Postgres根本不要在数据库中保存毫秒:
ALTER TABLE {tablename} ALTER updated_at SET DATA TYPE timestamp(0) without time zone;
另一种选择是覆盖PostgresGrammar类及其getDateFormat()方法,但它在laravel 4.2上对我不起作用