Many To Many

多对多在两个模型之间添加连接表。

例如,如果应用程序包含用户和语言,并且一个用户可以说多种语言,并且许多用户可以说一种指定的语言。

// User has and belongs to many languages, `user_languages` is the join table
type User struct {
  gorm.Model
  Languages []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
}

当使用 GORM AutoMigrateUser 创建表时,GORM 将自动创建连接表

Back-Reference

// User has and belongs to many languages, use `user_languages` as join table
type User struct {
  gorm.Model
  Languages []*Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
  Users []*User `gorm:"many2many:user_languages;"`
}

查找关联的信息

覆盖外键

对于 many2many 关系,连接表拥有引用两个模型的外键,例如:

要覆盖它们,可以使用标签 foreignKeyreferencesjoinForeignKeyjoinReferences ,不必一起使用它们,只需使用其中一个来覆盖一些外键/引用

标签​

​作用对象​

​功能说明​

​示例值​

​实际作用​

foreignKey

主模型 (User)

指定主模型中外键字段

Refer

使用 Refer代替默认 ID

joinForeignKey

连接表

指定连接表中指向主模型的外键

UserReferID

连接表使用 user_refer_id字段

references

关联模型 (Profile)

指定关联模型中被引用的字段

UserRefer

引用 Profile 的 UserRefer字段

joinReferences

连接表

指定连接表中指向关联模型的外键

ProfileRefer

连接表使用 profile_refer字段

自关联

自定义JoinTable

JoinTable 可以是一个功能齐全的模型,比如拥有 Soft DeleteHooks 支持以及更多的字段,你可以使用 SetupJoinTable 来设置它,例如:

自定义连接表的外键要求为复合主键或复合唯一索引

最后更新于