我的一个模型上有start_date
和end_date
字段。
一段时间以来,我们一直将这些属性保存为Carbon
个日期,而没有使用$dates
属性:
start_date: {
date: "2016-09-28 00:00:00.000000",
timezone_type: NumberLong("1"),
timezone: "-04:00"
},
end_date: {
date: "2016-09-30 00:00:00.000000",
timezone_type: NumberLong("1"),
timezone: "-04:00"
}
我想利用Laravel中的$dates
属性并将其转换为Carbon
个日期。
但是,当我将它们简单地添加到属性中时,Laravel不满意:
protected $dates = ['start_date', 'end_date'];
然后尝试将它们转换:
foreach($models as $model) {
$model->start_date = new Carbon($model->start_date);
$model->end_date = new Carbon($model->end_date);
$model->save();
}
在访问器上出错时:
exception: "ErrorException"
file: "/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php"
line: 760
message: "preg_match() expects parameter 2 to be string, array given"
有什么想法吗?
答案 0 :(得分:0)
<teens-internal teens="teens"></teens-internal>
数组仅用于在加载数据库时将存储在数据库中的日期/日期时间字符串转换为Carbon实例。您无法将Carbon实例直接保存到数据库中,您应该首先在Carbon实例上调用teens
之类的东西并存储该字符串。
https://laravel.com/docs/5.7/eloquent-mutators#date-mutators
编辑:我看到您的评论,您已将数据库中的日期保存为数组?您可能需要编写一个自定义访问器,以将这些日期转换为Carbon日期,因为Carbon仅解析字符串。
查看有关如何编写访问器的Laravel文档:https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor