2015-03-31 32 views
1

我以Laravel 5開頭,所以我的問題可能聽起來有點愚蠢。 目前正在開發類似twitter的功能。用戶可以發佈帖子,並且可以關注其他一些用戶,以便他們可以看到他們發佈的內容。從Laravel的許多關係中重新組合值? (收藏集)

比方說,我想顯示我關注的人的最後10個帖子。所以我寫了這一點:

$followed = Auth::user()->follows->load(['posts' => function($query) 
{ 
    $query->orderBy('created_at', 'desc')->take(10); 
}]); 

現在我有我關注的人的集合,併爲他們每個人,崗位的集合,通過創建日期進行排序......可是現在,我怎麼能重新組合所有這些發佈到一個集合中,同時保持排序,沒有精心設計的迭代(如果可能的話)?

回答

0

可能有一個更簡單的方法來做到這一點,但我想不出一個。你可以嘗試這樣的:

$postsOnly = collect(); # we'll add posts to this and sort it later 

foreach ($followed as $person) { 

    foreach ($person->posts as $post) { 

     $postsOnly->add($post); 
    } 
} 

$postsOnly = $postsOnly->sortBy(function($post) { 

    // I don't know if you can sort with a Carbon DateTime object 
    // (so convert to a unix timestamp for comparison/sorting) 
    return $post->created_at->format('U');   
}); 

你也可以嘗試根據您的要求排序集合定製sort()sortByDesc()方法。

我還沒有測試任何這個,但希望它大多是正確的...

+0

謝謝,這就是我最終做的。我也認爲有一個更簡單的方法,但找不到任何! 可悲的是,由框架在Post表上執行的sql請求正好返回我所需要的... – jimmeu 2015-04-02 10:25:26