【问题标题】: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();这不容易吗?

标签: laravel eloquent relationship laravel-8


【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      相关资源
      最近更新 更多