Laravel 8.x,3个模型和多对多关系

Laravel 8.x,3个模型和多对多关系,laravel,eloquent,pivot,many-to-many,Laravel,Eloquent,Pivot,Many To Many,我是拉雷维尔的新手,尝试以下几点: 我有这些桌子: 学科:id |名称 专业:id |名称 类别:id |名称 专业(透视表):id |专业|专业| id 学科模式: public function specialties() { return $this->belongsToMany(Specialty::class); } 专业模式: public function disciplines() { return $this-&g

我是拉雷维尔的新手,尝试以下几点:

我有这些桌子:

学科:id |名称

专业:id |名称

类别:id |名称

专业(透视表):id |专业|专业| id

学科模式:

public function specialties()
    {
        return $this->belongsToMany(Specialty::class);
    }
专业模式:

public function disciplines()
    {
        return $this->belongsToMany(Discipline::class);
    }
我的问题是:

如何将类别与透视表规程\专业关联(多对多),以便使用规程和专业ID访问类别名称?
我曾经想到了一个额外的数据透视表,它链接了类别id和专业id,但我不知道这是否是最好的解决方案以及如何做到这一点。你有什么建议吗?非常感谢您的帮助。

您可以介绍一个连接/轴心模型,该模型将把这三个关系关联为一对一/归属到学科/专业/类别中的一对多/拥有多

Discipline       Speciality     Category
    \\              ||             //
     \\             ||            //
      DisciplineSpecialityCategory
规程特殊类别
模型将具有以下属性或FK

表:学科、专业、类别

  • 纪律处分
  • 专业知识
  • 类别识别码
现在,模型定义如下

class Discipline extends Model
{
    public function disciplineSpecialityCategory()
    {
        return $this->hasMany(DisciplineSpecialityCategory::class, 'id', 'discipline_id');
    }
}

class Speciality extends Model
{
    public function disciplineSpecialityCategory()
    {
        return $this->hasMany(DisciplineSpecialityCategory::class, 'id', 'speciality_id');
    }
}

class Category extends Model
{
    public function disciplineSpecialityCategory()
    {
        return $this->hasMany(DisciplineSpecialityCategory::class, 'id', 'category_id');
    }
}

class DisciplineSpecialityCategory extends Model
{
    public function discipline()
    {
        return $this->belongsTo(Discipline::class, 'id', 'discipline_id');
    }
    public function speciality()
    {
        return $this->belongsTo(Speciality::class, 'id', 'speciality_id');
    }
    public function category()
    {
        return $this->belongsTo(Category::class, 'id', 'category_id');
    }
}

你能确认每个学科和专业的组合也有一个类别吗?或者它可以保持没有类别。任何学科和专业的结合都会有一个类别。看起来很有效,谢谢!