【问题标题】:Laravel paginate items in multiple categoriesLaravel 对多个类别中的项目进行分页
【发布时间】:2014-11-07 14:01:50
【问题描述】:

我有 2 个表格、产品和类别。产品属于不同的类别,类别以树状结构形成,允许父类别和子类别关系。那么给定一个特定的类别,我应该如何编写查询来获取属于该类别及其所有子类别的分页产品?

我忘了提到,在我的设置中,产品和类别是多对多的关系,有一个名为 product_catrgory 的数据透视表。

【问题讨论】:

  • 您需要whereHas 来检查与whereIn('id', $ids) 相关的类别,并递归获取那些$ids。我会为此考虑更好的设置。
  • 对不起,我没有完全理解你,你是指更好的设置,如关系设置?意思是每个产品都应该属于一个且只有一个类别?我不是电子商务系统方面的专家,这种关系的一般设置是什么?
  • 我的意思是类别的树形结构。阅读有关自引用表关系的其他类型的架构。

标签: laravel eloquent query-builder pagination


【解决方案1】:
$ids = $category->children()->lists('id');

$ids[] = $category->id;

$products = Product::whereIn('category_id', $ids)->paginate(20);

【讨论】:

  • @MarcinNabiałek - 不仅更短,而且更高效。在这种情况下,无需加载所有子模型。
【解决方案2】:

也许还有其他更好的方法,但你可以这样做:

$ids = [];

$ids[] = $category->id;

foreach ($category->children as $child) {
  $ids[] = $child->id;
}

$products = Product::whereIn('cat_id', $ids)->paginate(15);

【讨论】:

    【解决方案3】:

    在我看来,最简单的方法是首先递归获取类别 ID 及其所有子类别 ID。并使用 whereIn(array of category id) 查询数据库以获取所有产品。我不认为你可以在一个查询中做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2012-08-09
      • 2021-02-10
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多