gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:03:26 24 4
gpt4 key购买 nike

我是 laravel 的新手,正在尝试以下操作:
我有这些表:
学科: id |姓名
专长:id |姓名
类别: id |姓名
学科专业(数据透视表):id |纪律_id | specialties_id
学科模型:

public function specialties()
{
return $this->belongsToMany(Specialty::class);
}
专业型号:
public function disciplines()
{
return $this->belongsToMany(Discipline::class);
}
我的问题是:
我如何将(多对多)类别与数据透视表jection_specialty 相关联,以便使用学科和专业ID 访问类别名称?
我曾想过一个额外的数据透视表,它链接了类别 ID 和学科专业 ID,但我不知道这是否是最好的解决方案以及如何去做。你有什么建议吗?任何帮助表示赞赏。

最佳答案

您可以引入一个连接点/枢轴模型,它将这 3 个关系关联为多对一/属于和一对多/具有多对多/来自学科/专业/类别的关系。

Discipline       Speciality     Category
\\ || //
\\ || //
DisciplineSpecialityCategory
DisciplineSpecialityCategory模型将具有以下属性或 FK
表:jection_speciality_category
  • 纪律_id
  • speciality_id
  • category_id

  • 现在你的模型定义会像
    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');
    }
    }

    关于Laravel 8.x,3 个模型和多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66330733/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com