Laravel具有20000行的多对多关系分页


Laravel Many to Many Relationship Pagination with 20,000 rows

我有一个项目和类别表,以及一个透视表;我得到了一个类别中所有相关的文章。使用

$category = Category::first();
return $category->articles()->paginate(10); // many to many relationship $this->belongsToMany(Article::class, 'article_category');

它返回正确的文章,但当一个类别中有20000多篇文章时,它的速度太慢了。有什么方法可以加快查询速度吗?

注意:所有表都有索引。

我已经面对过好几次了。

到目前为止,我知道的唯一解决方案是不要在复杂查询中使用ELOQUENT。

您必须更改为数据库查询生成器。

我假设您在查询中使用了"whereHas"。使用它会大大降低查询速度。如果您确实使用了它,请更改为DB Query with Join方法。那会快很多。

唯一的问题是没有您可以使用的关系,您已经在模型中声明了它。您必须手动将其链接回来。

但最近我听说他们已经在5.3中添加了这个关系功能。但我还没有检查。

希望这能解决问题。