【问题标题】:Paginating eager loading in laravel在 laravel 中分页急切加载
【发布时间】:2021-09-29 03:24:27
【问题描述】:

我正在尝试通过类别获取产品并在类别下显示产品。我还需要为每个类别的产品添加分页。我尝试了以下解决方案,并且获得了所有类别,但我仅获得一个类别的产品,而其他产品则为空。

    $this->category->with(['products' => function ($query) {
        $query->paginate(3);
    }])->get();

【问题讨论】:

  • 你不能对关系进行分页......这没有任何意义,因为这里的“主要”模型是category,你如何对关系进行分页?
  • @matiaslauriti 我该怎么做? .我必须逐个获取类别吗?
  • 你不能对相关模型进行分页,你只能对主模型进行分页,所以,如果你只想得到X个products,你将不得不使用limit作为答案下来在下面,但这是你能做的,你不能对相关模型进行分页。

标签: laravel eloquent laravel-8 eager-loading


【解决方案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 数组中删除闭包即可。 如果您知道您不会有太多类别,则可以完全删除分页(因此检索数据库中的所有类别,但只检索那些包含产品的类别)。

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2023-04-03
    • 1970-01-01
    • 2019-07-06
    • 2011-05-23
    • 2014-08-13
    • 2021-04-23
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多