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
}

 

不知道有沒有更好的辦法,如果有,麻煩有緣人指點迷津,不勝感激!

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