Laravel在相同的表上查询关联用户

时间:2016-08-04 18:59:42

标签: php mysql laravel model

我正在使用Laravel 5.2并尝试构建一个查询,以创建过去30天内推荐其他用户的前5位用户的表格。

目前,用户表中有一列'推介'其中包含引用它们的用户的ID。我将在下面提供我当前的查询,以便您了解相关信息。但基本上我想返回一个由5个用户组成的列表,这些用户推荐次数最多,排序最多,所以我可以创建我的排行榜表。

这是我到目前为止所得到的:

$top5_referrers = User::join('users_roles_link', 'users_roles_link.user_id', '=', 'user.id')
                                ->where('users_roles_link.role_id',12)
                                ->whereDate('user.created_at', '>=', Carbon::today()->subDay(30)->toDateString())
                                ->select(
                                    DB::raw('
                                        user.id, user.username
                                        (SELECT COUNT(u.id) FROM user u WHERE u.referral = user.id AND u.referral IS NOT NULL AND u.created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)) AS total_signups
                                    '))
                                ->groupBy('user.id')
                                ->orderBy('total_signups', 'desc')
                                ->take(5)
                                ->get();

现在我知道我已经错了,因为已经有一个角色为12的用户所在的位置(对于那些想知道的用户而言,这是我唯一对此列表感兴趣的人)引用!),我将结果限制为这些mods,当我真的需要带回一个只有mod的列表,但将该列表基于用户。

此系统有14,000多个用户,因此我需要尽可能在数据库服务器上执行此操作。有人可以提供任何建议吗?我真的很感激。感谢。

1 个答案:

答案 0 :(得分:0)

好的,所以今后任何人都会发现这一点。

我在考虑这个问题。我只需要抓住所有第一个角色为'12'的用户,然后删除whereDate,因为我需要所有具有角色12的用户,而不仅仅是新的启动者。

然后在DB :: raw中,我能够选择具有与当前引用的用户匹配的引用的用户。

傻傻的我。