Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中设置PostgreSQL连接的默认日期格式_Php_Postgresql_Laravel_Eloquent_Php Carbon - Fatal编程技术网

Php 在Laravel中设置PostgreSQL连接的默认日期格式

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.

当我试图从我的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. 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上对我不起作用