【发布时间】:2014-11-17 00:26:00
【问题描述】:
所以我在弄清楚如何进行提要风格的 mysql 调用时遇到了一些麻烦,我不知道这是一个雄辩的问题还是 mysql 的问题。我相信这两者都是可能的,我只是需要一些帮助。
所以我有一个用户,他们转到他们的提要页面,在这个页面上显示来自他们朋友的东西(朋友投票、朋友 cmet、朋友状态更新)。所以说我有汤姆、蒂姆和泰勒作为我的朋友,我需要得到他们所有的选票、cmets、状态更新。我该怎么做?我有一个按 ID 号列出的所有朋友的列表,并且我有每个事件(投票、cmets、状态更新)的表,其中存储了 ID 以链接回用户。那么我怎样才能一次获得所有这些信息,以便我可以将其显示在提要中。
蒂姆评论“酷”
Taylor 说“Woot first status update~!”
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 倍。有什么想法吗?
【问题讨论】:
-
您如何存储此
list of all the friends by Id number.... 是在friends表中,还是在users表的列中以逗号分隔的列表?如果是后者,则规范化您的数据库,以便您可以使用模型关系 (hasManyThrough()) -
您可以在您的数据库中创建一个视图,并为它创建一个 Eloquent
model。然后只需获取您想要的所有事件。否则你可以使用polymorphic关系:laravel.com/docs/eloquent#polymorphic-relations -
请不要在原问题上添加正确答案,那样会变得很模糊
标签: php mysql sql laravel eloquent