【问题标题】:Error when i want insert a date in DB with laravel当我想用 laravel 在数据库中插入日期时出错
【发布时间】:2016-02-27 23:23:34
【问题描述】:

我正在使用带有 eloquent 的 laravel 5.1,我有一个 postgre 数据库,我想插入一个带有一些日期的对象。我的开始格式日期类似于“15/10/2015”,我需要转换为'Ym-d'。

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

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

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

$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

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

【问题讨论】:

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


    【解决方案1】:

    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。你可能有兴趣像 the docs 一样更改 laravel 的格式,但是我怀疑这会影响 created_atupdated_at(也是 deleted_at)字段,默认情况下是时间戳而不是日期。

    ps。对,我忘了提到你必须在控制器中包含 Carbon,只需添加 use Carbon/Carbon

    【讨论】:

    • 谢谢,但我想在控制器中转换我的日期(我有很多日期)。我解决了我的问题。我为我所有的约会添加了一个突变器。code : private function setPrjStartDateValue($value) { $date_parts = explode('/', $value); $this->attributes['prj_start_date'] = $date_parts[2].'-'.$date_parts[0].'-'.$date_parts[1]; }
    • 嗯,这是解决方案之一(但不是我想到的)。很高兴你解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多