laravel 4 - 计算每个相关表的行数

时间:2014-10-22 06:07:17

标签: laravel-4 count eloquent relationship

我想分页用户并为每个用户计算喜欢,评论和图片。这就是我现在所做的,但速度很慢。 (精选图片需要大约80毫秒,6000个图片和30个用户)

public function index()
{
    $users = User::with('pics', 'comments', 'likes')
                    ->groupBy('users.displayname')
                    ->paginate(30);

    return View::make('usersoverview')->with('users',$users);
}

我怎样才算数行? (每个表格都有一个'用户' user_id'其中包含用户的ID)

Model' User'的关系:

public function comments()
{
    return $this->hasMany('Comment','user');
}  

public function pics()
{
    return $this->hasMany('Pic','user_id');
}

public function likes()
{
    return $this->hasMany('Like','user');
}

2 个答案:

答案 0 :(得分:0)

当您使用雄辩并获得结果时,您可以将其作为Collection类型,或其他人称之为类固醇的数组。

如果您查看Collection课程,您会看到一个名为count的方法,该方法可以完成此任务。

答案 1 :(得分:0)

我现在有更快的查询。不完美,但是8毫秒 - 而不是80毫秒。

    $users = DB::table('users')
                ->select(DB::raw('(SELECT COUNT(*) 
                                   FROM pics 
                                   WHERE user_id = users.id) AS countpics,
                                  (SELECT COUNT(*)
                                   FROM comments
                                   WHERE user = users.id) AS countcomments,
                                  (SELECT count(*)
                                   FROM likes
                                   WHERE user = users.id) AS countlikes,
                                  username,
                                  displayname'))
                ->groupBy('username')
                ->paginate(30);