【问题标题】:Laravel 5 multi level categoryLaravel 5 多级分类
【发布时间】:2018-05-08 15:59:18
【问题描述】:

我目前有 2 张桌子 categorysubcategory 一切正常,但我需要另一个级别的子类别,就像 category->sub->sub 一样,我试图找到一个合理的解决方案,我结束了准备一堆包来帮我处理。

现在的问题是

  1. 我必须删除我的类别表及其与我的关系吗? 在我尝试任何包之前的其他模式,或者我应该在我当前的表格中添加包顶部?
  2. 根据您的经验,最适合我的软件包是什么?

提前致谢。

【问题讨论】:

  • 如果您的项目处于源代码控制之下,只需创建一个测试分支并在完成后将其丢弃。

标签: laravel-5


【解决方案1】:

你不需要依赖包来实现它。

您可以设计您的categories 表,如下所示:

|----------|------------|---------------|
|    id    |    name    |  category_id  |
|----------|------------|---------------|

这里category_id 是可空字段,外键引用categories 表的id

对于类别category_id,字段将是NULL,对于子类别category_id,将是它的父类别ID。对于子子类别,category_id 将是父子类别 ID。

在模型中,你可以写如下关系:

Category.php

/**
 * Get the sub categories for the category.
 */
public function categories()
{
    return $this->hasMany(Category::class);
}

现在您可以获取您的子类别,例如$category->categories

注意:您不需要subcategory 表,只需一张表即可。

更新 - 显示产品类别

更新Category.php

/**
 * Get the parent category that owns the category.
 */
public function parent()
{
    return $this->belongsTo(Category::class);
}

Product.php:

/**
 * Get the category that owns the product.
 */
public function category()
{
    return $this->belongsTo(Category::class);
}

现在,您需要获取产品类别及其所有父项。它将是从父母到孩子的一系列类别。然后你就可以随心所欲地展示了。

$category = $product->category;
$categories = [$category];

while (!is_null($category) && !is_null($category = $category->parent)) {
    $categories.unshift($category);
}

// $categories = ['parent category', 'sub category', 'sub sub category' ..]

按顺序显示类别标题

foreach ($categories as $category) {
    echo $category->title . '<br>';
}

【讨论】:

  • 很有趣,所以对于子子类别(第三级),我得到第一级或第二级的 id 为category_id?
  • 二级。 category_id 始终引用类别的父 ID。
  • 嗨,我仍在按照您建议的方式进行工作,我想知道如何显示我的帖子/产品类别层次结构?例如我正在访问我的产品,我想表明该产品在 default categorydefault category-&gt;first child 下,我该怎么做?这不起作用{{ucfirst($product-&gt;category-&gt;categories-&gt;title)}}
  • 嗨,如果我在控制器中使用你最后一个foreach,我会得到错误,当我在刀片中使用它时,它只给我没有任何父级的类别标题。
猜你喜欢
  • 2016-03-16
  • 1970-01-01
  • 2017-01-29
  • 2017-03-12
  • 1970-01-01
  • 2015-04-07
  • 2017-02-24
  • 2017-01-24
  • 2016-04-19
相关资源
最近更新 更多