我希望在带有laravel

时间:2015-11-25 08:48:14

标签: postgresql date eloquent laravel-5.1 php-carbon

我正在使用laravel 5.1和eloquent,我有一个postgre数据库,我想插入一个有一些日期的对象。我的开始格式日期就像'15 / 10/2015',我需要转换成'YM-d'。

为此我在我的模型中使用日期变异器,我添加这一行:

protected $dates = ['created_at', 'updated_at', 'prj_start_date', 'prj_end_date_init'];

我使用带有服务和存储库的架构,所以在我的存储库中创建我在DB中的对象我有这个:

$this->model->create($data);

当我尝试插入时我有这个错误

InvalidArgumentException in Carbon.php line 425: 
Unexpected data found.
Unexpected data found.
Data missing
in Carbon.php line 425
at Carbon::createFromFormat('Y-m-d H:i:s', '15/10/2015') in Model.php line 2959
at Model->asDateTime('15/10/2015') in Model.php line 2915
at Model->fromDateTime('15/10/2015') in Model.php line 2870
at Model->setAttribute('prj_start_date', '15/10/2015') in Model.php line 422

为什么不工作,我错过了什么? 有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

at Carbon::createFromFormat('Y-m-d H:i:s', '15/10/2015') in Model.php line 2959中很明显,不知何故laravel 硬编码它的日期变异器。我建议使用手动方法,通过以下方式将字符串转换为Carbon实例

Carbon::createFromFormat($format, $time, $tz);

例如假设有一个日期字段而不是时间戳:

Carbon::createFromFormat('d/m/Y', '15/10/2015');

<强> PS 即可。我没有时间测试这个。然而,从source学习是非常有趣的吗?

<强> PS 即可。您可能有兴趣更改laravel的格式,就像the docs一样,但我怀疑这会影响created_atupdated_at(还有deleted_at)字段,默认情况下是时间戳而不是日期

<强> PS 即可。是的,我忘了提到你必须在你的控制器中包含 Carbon ,只需添加use Carbon/Carbon