Gorm的many2many

学习和使用GORM已经有了一段时间,记录一下关于many2many的关联创建。

先看一下结构定义:

type Student struct {
    gorm.Model
    Code string `gorm:"index;unique;"`// 学生编码或者叫学号
    Name string // 学生名称
}

type Teacher struct {
    gorm.Model
    Code string  `gorm:"index;unique;"`// 教师编码
    Name string  // 教师名称
}

需求:使用学号和教师编码建立多对多的关联关系。

使用官方的双向引用,代码如下:

type Student struct {
    gorm.Model
    Code string `gorm:"index;unique;"`
    Name string

    Teachers []*Teacher `gorm:"many2many:stu_tea;"`
}

type Teacher struct {
    gorm.Model
    Code string `gorm:"index;unique;"`
    Name string

    Students []*Student `gorm:"many2many:stu_tea;"`
}

这样创建出来的关联关系是使用两个表的各自主键ID创建的,不与需求符合。

尝试了使用foreignKey和references来设定关联字段,在自动迁移Automigrate时,创建的关联表都不能以学生编码和老师编码作为关联,所以不能满足需求。注意:如果是单向引用,可以满足需求的。

如何既满足双向引用,又满足使用自定义字段作为关联的关系设定呢?

目前我的方法是手动设定关联关系表,且是使用hasMany的方式来实现的,既学生表与关系表是hasMany的关系,教师表与关系表也是hasMany的关系。代码如下:

type Student struct {
    gorm.Model
    Code string `gorm:"index;unique;"`
    Name string

    StuTeaRSs []*StuTeaRS `gorm:"foreignKey:StuCode;"`
}

type Teacher struct {
    gorm.Model
    Code string `gorm:"index;unique;"`
    Name string

    StuTeaRSs []*StuTeaRS `gorm:"foreignKey:TeaCode;"`
}

type StuTeaRS struct {
   gorm.Model
   StuCode string
   TeaCode string
}

 

不知道有没有更好的办法,如果有,麻烦有缘人指点迷津,不胜感激!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章