在 laravel 中分页急切加载
Posted
技术标签:
【中文标题】在 laravel 中分页急切加载【英文标题】:Paginating eager loading in laravel 【发布时间】:2021-09-29 03:24:27 【问题描述】:我正在尝试通过类别获取产品并在类别下显示产品。我还需要为每个类别的产品添加分页。我尝试了以下解决方案,并且获得了所有类别,但我仅获得一个类别的产品,而其他产品则为空。
$this->category->with(['products' => function ($query)
$query->paginate(3);
])->get();
【问题讨论】:
你不能对关系进行分页......这没有任何意义,因为这里的“主要”模型是category
,你如何对关系进行分页?
@matiaslauriti 我该怎么做? .我必须逐个获取类别吗?
你不能对相关模型进行分页,你只能对主模型进行分页,所以,如果你只想得到X个products
,你将不得不使用limit
作为答案下来在下面,但这是你能做的,你不能对相关模型进行分页。
【参考方案1】:
我相信您想要的是对类别进行分页,但只对包含产品的类别进行分页。阅读whereHas
(https://laravel.com/docs/8.x/eloquent-relationships#querying-relationship-existence)。
示例代码:
$this->category->with([
'products' => function ($query)
$query->limit(3);
])
->whereHas('products')
->paginate(10);
如果您不想限制 3 个产品,则只需从 with
数组中删除闭包即可。
如果您知道您不会有太多类别,则可以完全删除分页(因此检索数据库中的所有类别,但只检索那些包含产品的类别)。
【讨论】:
以上是关于在 laravel 中分页急切加载的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 将两个模型合并到一个分页查询中,并带有急切加载的关系