我有一个带有日期突变的模型,如created_at
。我们假设一个通用的timestamp
属性。Laravel5 Eloquent默认日期突变失败,JSON日期输入
当从JSON格式的客户端传递数据,我会得到
{
timestamp: "2016-06-07T22:00:00.000Z"
}
该属性将用于设置一些模型,像这样:
$model = new Foo();
$model->timestamp = Input::get('timestamp');
因为这将触发日期mutator,php Carbon
被调用并失败
InvalidArgumentException in Carbon.php line 425
Unexpected data found.
Trailing data
现在,这是不是碳本身的问题,它能够处理JSON格式。如果你想尝试
new Carbon('2016-06-07T22:00:00.000Z');
你真的会得到预期的结果。
从我看到的问题出发,来自一个奇怪的雄辩行为。看到这个痕迹从上述InvalidArgumentException in Carbon.php line 425
:
in Carbon.php line 425
at Carbon::createFromFormat('Y-m-d H:i:s', '2016-06-07T22:00:00.000Z') in Model.php line 2915
at Model->asDateTime('2016-06-07T22:00:00.000Z') in Model.php line 2871
at Model->fromDateTime('2016-06-07T22:00:00.000Z') in Model.php line 2826
at Model->setAttribute('timestamp', '2016-06-07T22:00:00.000Z') in Model.php line 3351
雄辩试图createFromFormat
传递格式错误其犯规反映实际的JSON格式,这是造成碳例外。
另一方面,像上面提到的new Carbon($jsonDate)
这样的简单调用在这种情况下可以正常工作。
- 我该如何解决这个问题?
- 这不应该是一个雄辩的错误?
== ==编辑
我没有代码的任何突变自己。我使用的是默认的日期存取器,像这样:
public function getDates() {
return ['timestamp'];
}
这应该按预期工作。你如何定义mutator?你可以发布Model代码和'Input :: get('timestamp)'(我假设它不是一个对象)的确切值。我将离开我在这里设置的mutator来测试:'public function setTimestampAttribute($ value){$ this-> attributes ['timestamp'] = new \ Carbon \ Carbon($ value); }'和控制器代码:'$ obj-> timestamp ='2016-06-07T22:00:00.000Z';' –
请发布您的mutator。 –
我没有使用任何自定义的mutator,请参阅编辑。 – brazorf