我正在使用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
为什么不工作,我错过了什么? 有人能帮帮我吗?
答案 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_at
和updated_at
(还有deleted_at
)字段,默认情况下是时间戳而不是日期
<强> PS 即可。是的,我忘了提到你必须在你的控制器中包含 Carbon ,只需添加use Carbon/Carbon