Laravel雄辩的雄辩渴望

时间:2019-06-04 21:40:41

标签: php mysql laravel eloquent pagination

我有users,在多对多关系中可以属于groups。我正在尝试检索(分页)用户所属的所有组。效果很好,但是当我有1000多个用户时,即使我一次只分页25到50,事情也会变慢。在我的用户模型上:

public function groups()
{
    return $this->belongsToMany('App\Models\UserGroup', 'group_user', 'user_id', 'group_id');
}

我的查询是:

User::with('groups')->paginate(50);

因此,如果我在数据库(MySQL)中总共有大约50个用户,则一切都非常快(<= 300ms)。但是,当我添加1000时,即使我仍然只对每页最多分页50,它也会爬行(约3秒)。

编辑

实际上,大约50个TOTAL用户的正常请求是100ms,而不是300ms。

1 个答案:

答案 0 :(得分:1)

由于Thiago Barcala的评论,我能够使用以下命令分析查询日志:

\DB::enableQueryLog();
// perform query...
var_dump(\DB::getQueryLog());

我发现了问题。基本上,我在网上论坛模型上有一个with属性:

protected $with = [
    'features',
    'users'
];

因此,我有一堆用户被返回,他们正在返回其组,而每个组都在返回其中的所有用户。因此,由于这种关系(包括更多的关系),我获得了价值10MB的数据返回。我删除了with,一切都很好。