2015-10-18 61 views
1

我正在从数据库中提取数据并将其存储在$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();,上述块的 '//错误' 位变为Call to a member function diffForHumans() on string

最终,我需要将它作为json返回,因为它是ajax请求。我想覆盖created_at,所以我可以在视图的javascript部分使用group[i]['created_at'],返回并获取Carbon版本。

+0

使用与在中的foreach的foreach覆盖! – mohsen

+0

你是什么意思?你可以链接一个参考或其他东西吗? – senty

+0

回答了解! – mohsen

回答

1

首先,确保 'created_at' 是在$日期模型中的阵列。 像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(); 
+0

这样做的诀窍,我可以得到数据为'组[我] ['差异']'。非常感谢。但是,这里有一个问题,它给了我10分钟后而不是10小时前的差异值。任何想法? – senty

+0

你是对的,我已经更新了上面的代码。 –

+0

:D现在它使'10小时前'。非常感谢您的回复! – senty

-1

使用&您可以替换原来的值!

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 

} 
+0

这似乎没有办法诀窍 – senty