重新组合Laravel中许多关系中的值? (收集品)

时间:2015-03-31 14:41:33

标签: php laravel laravel-5

我从Laravel 5开始,所以我的问题可能听起来有些愚蠢。 目前正在开发类似Twitter的功能。用户可以发布,并可以关注其他一些用户,以便他可以看到他们发布的内容。

假设我要显示我关注的人的最后10个帖子。所以我写了这个:

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

现在我收集了一些我关注的人,每个人都有一系列帖子,按创建日期排序......但是现在,我怎样才能将所有这些帖子重新组合成一个集合,同时保持排序,没有精心的迭代(如果可能的话)?

1 个答案:

答案 0 :(得分: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()方法。

我没有测试任何这个,但希望它大部分是正确的......