如何排序这个雄辩的集合?

时间:2016-05-30 21:20:45

标签: php laravel laravel-5 eloquent laravel-5.2

我目前正在制作带有签到证的啤酒应用程序。用户签到代表他/她喝的啤酒。我现在正在处理当前登录用户的签到以及我通过友谊表设置的朋友的签到。

我正在抓取一组用户朋友和当前登录用户的一个实例,我将它们加在一起如下:

// merge the currently logged in user with their friends
$users = $users->add($user);

我现在有一个登录用户和他们的朋友的集合,最终想要显示他们的签到的某种时间表。我的主要问题是每当我想使用这样的东西时:

@foreach($users as $user)
     @foreach($user->checkins as $checkin)
         // my code
     @endforeach
 @endforeach

我得到所有用户签到但我得到每个用户的分块/分组输出。我最好只想按年龄而不是每个用户对它们进行排序,这样我就可以创建一个实际的时间表。现在我正在查看所有用户1的签到块,然后是一块用户2的签到等。

如何阻止此行为,只显示最新的签到?

1 个答案:

答案 0 :(得分:1)

当您在用户之间进行迭代时,只有通过他们的签到,您才会看到按用户分组的签到。为了能够按年龄订购签到,您需要直接迭代签到。

以下内容应该有所帮助:

// get IDs of users for which you want to show checkins
$users = $users->add($user);
$userIds = $users->modelKeys();

// load checkins for those users
$checkins = Checkin::whereIn('user_id', $userIds)->orderBy('created_at', 'desc')->with('user')->get();

$ checkins 变量将保存签到列表,按创建日期排序,最先签入最新签到。每个行都会将相应的用户保留在用户属性中。

您现在应该可以使用以下方法遍历所有签到:

 @foreach($checkins as $checkin)
   // your code here
   // user is available in $checkin->user
 @endforeach

您可能需要调整代码以匹配列/关系名称,但它应该让您知道如何解决它。