我目前有两张桌子category
& subcategory
并且一切正常,但我需要另一个级别的子类别,就像category->sub->sub
那样我试图找到一个合理的解决方案,我最终得到一堆包来处理我
提前感谢。
答案 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>';
}