覆盖集合中的原始值


Overwriting Original Values In Collections

我从数据库中获取数据并将其存储在$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
 }