Laravel 5多级别类别

时间:2018-05-06 03:10:42

标签: laravel-5

我目前有两张桌子category& subcategory并且一切正常,但我需要另一个级别的子类别,就像category->sub->sub那样我试图找到一个合理的解决方案,我最终得到一堆包来处理我

现在的问题是

  1. 我是否必须删除我的类别表及其与我的关系 在我尝试任何包之前的其他模式,或者我应该只添加当前表的包顶部?
  2. 根据您的经验,我的目的最好的包装是什么?
  3. 提前感谢。

1 个答案:

答案 0 :(得分:1)

您不需要依赖包来实现此目的。

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

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

此处category_id是可以为空的字段,外键引用id表的categories

类别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的子类别。

N.B:你不需要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>';
}