2015-10-18 62 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