我从数据库中获取数据并将其存储在$groups
上。每个条目有不同的created_at
。
我想在集合中覆盖created_at
字段,就在将其返回到视图之前,并有很好的->diffForHumans()
版本。
$groupsArray = $messages;
foreach($groupsArray as $key => $group) {
var_dump($groupsArray[$key]['created_at']); // works: 2015-10-17 21:55:46.000000'
var_dump($groupsArray[$key]['created_at']->diffForHumans()); // Error: A two digit month could not be found Data missing
$groupsArray[$key]['created_at'] = $groupsArray[$key]['created_at']->diffForHumans(); // Not Working
}
return $groupsArray->toJson();
如果我更改groupsArray = $messages->toArray();
,上面块的'//Error'位将更改为Call to a member function diffForHumans() on string
。
最终,我需要返回json,因为它是ajax请求。我想覆盖created_at
,所以我可以在视图中使用javascript部分的group[i]['created_at']
,返回并获得碳版本后。
首先,确保'created_at'在模型的$dates数组中。就像在http://laravel.com/docs/5.1/eloquent-mutators#date-mutators上描述的那样其次,您可以通过执行以下操作对集合进行迭代和更新:
$messages->transform(function ($item, $key) {
$item->difference = $item->created_at->diffForHumans(); // 10 hrs ago
return $item;
});
$messages->toJson();
使用&可以替换原来的值!
foreach($groupsArray as &$key => &$group) {
var_dump($groupsArray[$key]['created_at']);
var_dump($groupsArray[$key]['created_at']->diffForHumans());
$groupsArray[$key]['created_at'] = $groupsArray[$key] ['created_at']->diffForHumans(); // Not Working
}