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

Laravel 4 laravel 4-统计每个相关表的行数,laravel-4,count,eloquent,relationship,Laravel 4,Count,Eloquent,Relationship,我想对用户进行分页,并统计每个用户的喜好、评论和图片。我现在就是这么做的,但速度很慢。select pics在6000个PIC和30个用户上大约需要80毫秒 public function index() { $users = User::with('pics', 'comments', 'likes') ->groupBy('users.displayname') ->paginate(30);

我想对用户进行分页,并统计每个用户的喜好、评论和图片。我现在就是这么做的,但速度很慢。select pics在6000个PIC和30个用户上大约需要80毫秒

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

    return View::make('usersoverview')->with('users',$users);
}
我怎么能数一数行呢? 每个表都有一个“user”/“user\u id”,其中包含用户的id

模型“用户”的关系:

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');
}

当你使用雄辩和获得结果时,你会把它们作为一种集合类型,或者其他人如何称呼它,类固醇数组


如果您查看该类,您将看到一个名为的方法,该方法应该可以完成这项工作。

我现在有一个更快的查询。不完美,但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);

好吧,我想这可以让我数一数结果。但是我想减少结果并加快查询速度。没有得到庞大的集合,只有3个计数值。不知道是否有办法做到这一点。@hnes哦,我明白了。您只需要行计数,而不是实际结果。我不知道有什么内置的方法可以做到这一点。在这种情况下,我建议使用DB::select方法。但是,您必须手动编写查询。