如何在类别和子类别之间创建关系

Posted

技术标签:

【中文标题】如何在类别和子类别之间创建关系【英文标题】:How toc create relations between category and subcategories 【发布时间】:2021-03-29 19:24:45 【问题描述】:

我有 categoriessubcategories

表格 catgeories:

id
title
description

表格 subcategories:

id
category_id
parent_category_id

categories 表的数据:

subcategories 表的数据

就我而言,任何类别都有无限的子类别。如何为模型建立关系多对多以获得所有类别和子类别?

【问题讨论】:

为什么不考虑将子类别放在同一个表中,并为其分配父级的parent_category_id。然后在类别模型中:您将拥有: public function subCategories() return $this->hasMany(Category::class, 'parent_category_id');最后: Category::with('subCategories')->all();这不容易吗? 【参考方案1】:

我建议您将类别保留在如下表中

id parent_id name
1 0 parent cat
2 1 child cat

上表中parent_id值为0的为实际的父类别,编号为子类别,例如:child cate is child of parent cat,这样就可以实现无限的子类别。但是不要担心我们可以像您一样实现关系,请按照以下方式进行操作

我假设类别和子类别作为模型。在类别模型中编写如下关系

public function childCategories()
      return $this->hasMany('\App\subcategories','parent_category_id','id')
                 ->join('categories','categories.id','=','subcategories.categories')
                 ->select("categories.title",'subcategories.*');

当你调用分类时,如下通过with调用它,你会得到相关子分类的分类

$categories = categories::with('childCategories')->get();

【讨论】:

【参考方案2】:

要获取类别或子类别,您可以使用此

$allSubCategory = DB::table('sub_categories')->orderBy('id', 'DESC')
                    ->join('categories', 'sub_categories.category_id', '=', 'categories.id')
                    ->select('sub_categories.*', 'categories.category_name')
                    ->get();
    
    $allCategory = DB::table('categorys')->orderBy('id', 'DESC')
                    ->join('sub_categories', 'categorys.category_id', '=', 'sub_categories.id')
                    ->select('categorys.*', 'sub_categories.sub_category_name')
                    ->get();

【讨论】:

以上是关于如何在类别和子类别之间创建关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Magento 中使用产品 URL 附加类别和子类别 slug

如何使用部分视图列出无限数量的嵌套类别和子类别。(.NET CORE 5.0)

如何获取类别、文章和子类别及其文章?

类别和子类别

处理类别和子类别 MySQL 或 JSON

核心数据关系