Laravel 5 多级分类

maf*_*tis 3 laravel-5

我目前有 2 个表categorysubcategory并且一切正常,但我需要另一个级别的子类别,就像category->sub->sub我试图找到一个合理的解决方案一样,我最终得到了一堆包来为我处理。

现在的问题是

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

提前致谢。

Sov*_*von 10

您不需要依赖包来实现这一点。

你可以categories像下面这样设计你的表:

|----------|------------|---------------|
|    id    |    name    |  category_id  |
|----------|------------|---------------|
Run Code Online (Sandbox Code Playgroud)

这里category_id可为空场和参照外键idcategories表。

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

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

分类.php

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

现在你可以得到你的子类别,比如$category->categories.

注意:您不需要subcategory桌子,只有一张桌子可以完成这项工作。

更新 - 显示产品类别

更新Category.php

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

Product.php

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

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

$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' ..]
Run Code Online (Sandbox Code Playgroud)

按顺序显示类别标题

foreach ($categories as $category) {
    echo $category->title . '<br>';
}
Run Code Online (Sandbox Code Playgroud)