我想分页用户并为每个用户计算喜欢,评论和图片。这就是我现在所做的,但速度很慢。 (精选图片需要大约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');
}
答案 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);