Php 在Laravel中设置PostgreSQL连接的默认日期格式
当我试图从我的Laravel控制器获取JSON格式的雄辩模型对象列表时,我遇到了一个错误:Php 在Laravel中设置PostgreSQL连接的默认日期格式,php,postgresql,laravel,eloquent,php-carbon,Php,Postgresql,Laravel,Eloquent,Php Carbon,当我试图从我的Laravel控制器获取JSON格式的雄辩模型对象列表时,我遇到了一个错误: 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.
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-dh:i:s'
,而不是PostgreSQL提供的'Y-m-dh:i:s.u'
(或者其他什么,不确定毫秒和微秒是否可以互换)。当然,在我的所有模型类中都可以重写getDateFormat()
,但这很烦人(这并不是正确的位置,因为模型应该相当独立于数据库),即使我只是让它们都从基类继承。有没有办法改为设置查询语法的日期格式?似乎应该通过数据库配置文件来实现,但是我在文档中找不到任何关于这个的信息。不完全通过DB配置文件,但是你可以考虑告诉PoxGres根本不保存数据库中的毫秒:
ALTER TABLE {tablename} ALTER updated_at SET DATA TYPE timestamp(0) without time zone;
另一个选项是重写PostgresGrammar类及其getDateFormat()方法,但它在laravel 4.2上对我不起作用