我从Laravel 5开始,所以我的问题可能听起来有些愚蠢。 目前正在开发类似Twitter的功能。用户可以发布,并可以关注其他一些用户,以便他可以看到他们发布的内容。
假设我要显示我关注的人的最后10个帖子。所以我写了这个:
$followed = Auth::user()->follows->load(['posts' => function($query)
{
$query->orderBy('created_at', 'desc')->take(10);
}]);
现在我收集了一些我关注的人,每个人都有一系列帖子,按创建日期排序......但是现在,我怎样才能将所有这些帖子重新组合成一个集合,同时保持排序,没有精心的迭代(如果可能的话)?
答案 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()方法。
我没有测试任何这个,但希望它大部分是正确的......