gpt4 book ai didi

php - Laravel Eloquent Eager Loading 和 ownToMany 太慢

转载 作者:行者123 更新时间:2023-11-29 09:41:53 24 4
gpt4 key购买 nike

我的用户可以属于多对多关系的。我正在尝试检索(分页)用户及其所属的所有组。这工作得很好,但是当我有 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 个用户,那么一切都 super 快 (<= 300ms)。但是当我添加 1000 个时,即使我仍然只对每页最多 50 个分页,它也会爬行(约 3 秒)。

编辑

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

最佳答案

感谢 Thiago Barcala 的评论,我能够使用以下方法分析查询日志:

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

我发现了这个问题。基本上,我的组模型上有一个 with 属性:

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

所以我有一群用户被返回,他们正在返回他们的组,并且每个组都返回其中的所有用户。因此,由于这种关系(包括更多关系),我返回了大约 10MB 的数据。我删除了with,一切都很好。

关于php - Laravel Eloquent Eager Loading 和 ownToMany 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com