// 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 AutoMigrate 為 User 建立表格時,GORM 會自動建立關聯表格
反向參考
宣告
// 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;"` }
擷取
// Retrieve user list with eager loading languages funcGetAllUsers(db *gorm.DB) ([]User, error) { var users []User err := db.Model(&User{}).Preload("Languages").Find(&users).Error return users, err }
// Retrieve language list with eager loading users funcGetAllLanguages(db *gorm.DB) ([]Language, error) { var languages []Language err := db.Model(&Language{}).Preload("Users").Find(&languages).Error return languages, err }
覆寫外來鍵
對於 many2many 關係,關聯表格擁有參考兩個模型的外來鍵,例如
type User struct { gorm.Model Languages []Language `gorm:"many2many:user_languages;"` }
// Change model Person's field Addresses' join table to PersonAddress // PersonAddress must defined all required foreign keys or it will raise error err := db.SetupJoinTable(&Person{}, "Addresses", &PersonAddress{})