如何在Laravel中实现一个由关注者对用户列表进行排序的功能?

时间:2015-08-06 03:25:07

标签: php laravel laravel-5

需要一些建议。我们在应用中添加了一项关注功能。我们使用了本教程的模型和表结构 - http://ilikekillnerds.com/2014/09/how-to-create-a-user-followingfollower-system-like-twitter-in-laravel-4/

我们添加了一个以下页面,它基本上列出了用户关注的用户的用户名。现在问题是我们需要添加一个功能来按照关注者数量对列表进行排序。您可以考虑添加该功能的最简单方法是什么?如果可能的话,没有缓存(如将关注者数存储在users表中),仍然可以使Laravel的 - > paginate()功能正常工作。只有在使用简单的Eloquent查询无法实现缓存时,我才会使用缓存。

我已经没有关于如何为它构建Eloquent查询的想法。

我们顺便使用Laravel 5.1。

提前致谢! :)

2 个答案:

答案 0 :(得分:3)

您希望根据其数量显示以下列表。

$topUsersJoinQuery = DB::table('user_follows')
            ->select('follow_id', DB::raw('COUNT(follow_id) AS count'))
            ->groupBy('follow_id'); //this will fetch the followers ids and group them.

$top_users = DB::table('users')->select('*')
            ->join(DB::raw('(' . $topUsersJoinQuery->toSql() . ') i'), function ($join)
            {
                $join->on('i.follow_id', '=', 'users.id');
            })
            ->orderBy('count', 'desc')
            ->select('name','id','title')
            ->take(3)
            ->get(); //joining the user_follows table with users table to fetech users info for view.blade.php

希望它对你有所帮助。

答案 1 :(得分:1)

如何使用这样的查询:

select 
users.*, followerTempTable.followers_count 
from users 
left join (
    select user_id, count(*) as followers_count from followers group by user_id
) as followerTempTable on followerTempTable.user_id = users.id 
order by followers_count
-- add your limit and offset conditions for pagination

此链接也可能有用:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/