我有一个基于 laravel 的网站。网站由用户组成,用户可以相互关注。 用户
可以制作Shoutouts
(如推文),并且相互关注的用户应该能够看到这些。我的数据库中有一个 User
表、一个 Shoutout
表和一个 Follow
表。
因为它是在 Laravel 中制作的,用户与 Shoutout 和 Follow 表都有 hasMany
关系。
因此,当用户登录时,我想获取该用户关注的所有人。我通过以下方式做到这一点:
$following = Follow::whereUser_id($user->id)->get();
但是,我现在如何从 $following
中的用户那里获取 Shoutouts
,按照创建 shoutout 的时间降序排列,这样我就可以做一个foreach($shoutouts as $shoutout) 在我看来?
这个想法是用户可以看到用户关注的人的最新 Shoutouts。
如果我做了类似的事情:
$following = Follow::whereUser_id($user->id)->get();
foreach($following as $follow) {
$shoutouts = $shoutouts . Shoutout::whereUser_id($follow->user_id)->get();
}
我会按错误的顺序获取它们,因为这会依次给我特定用户的所有留言,但我想按降序排列,以便用户首先看到最新的留言。
感谢所有帮助。
最佳答案
您可以使用 join
进行尝试作为:
假设您的 Follow
表中有一个 followed_user_id
。
$shoutouts = Shoutout::join('follow', 'shoutout.user_id', '=', 'follow.followed_user_id')
->where('follow.user_id', $user->id)
->select(''shoutout.*'')
->orderBy('shoutout.created_at', 'desc')
->get()
关于php - 基于两个不同因素在数据库中获取最新输入的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638024/