我在尝试做一个类似于Feed的MySQL查询,但是不确定是Eloquent的问题还是MySQL的问题。我相信两种方法都是可行的,我只需要一些帮助。
现在我有一个用户,他们进入自己的Feed页面,在这个页面上显示来自他们朋友的信息(朋友的投票、评论、状态更新)。比如说,我有Tom、Tim和Taylor三个朋友,我需要获取他们所有的投票、评论和状态更新。我有一个按Id编号列出所有朋友的列表,并且我为每个事件(投票、评论、状态更新)都有一个表格,其中存储了与用户相关联的Id。那么,我该如何一次性地获取所有这些信息,以便我可以以以下形式在Feed中显示:
Tim 评论了“酷”
Taylor 说:“Woot第一条状态更新!”
Taylor 投票给了“最好的比赛”
编辑@damiani 所以在进行模型更改后,我的代码如下,它确实返回了正确的行:
$friends_votes = $user->friends()->join('votes', 'votes.userId', '=', 'friend.friendId')->orderBy('created_at', 'DESC')->get(['votes.*']);
$friends_comments = $user->friends()->join('comments', 'comments.userId', '=', 'friend.friendId')->orderBy('created_at', 'DESC')->get(['comments.*']);
$friends_status = $user->friends()->join('status', 'status.userId', '=', 'friend.friendId')->orderBy('created_at', 'DESC')->get(['status.*']);
但我希望它们都能同时发生,这是因为MySQL按顺序排序数千个记录比PHP获取3个列表、合并它们然后进行排序要快100倍。有什么想法吗?