58.一对一
type User struct {
gorm.Model
Profile Profile
ProfileID int
}
type Profile struct {
gorm.Model
Name string
}
db.Model(&user).Related(&profile)
// SELECT * FROM profiles WHERE id = 111; // 111是user的外键ProfileID
61.一对多
// User 包含多个 emails, UserID 为外键
type User struct {
gorm.Model
Emails []Email
}
type Email struct {
gorm.Model
Email string
UserID uint
}
db.Model(&user).Related(&emails)
SELECT * FROM emails WHERE user_id = 111; // 111 是 user 的主键
62.多对多
// User 包含并属于多个 languages, 使用 `user_languages` 表连接
type User struct {
gorm.Model
Languages []Language `gorm:"many2many:user_languages;"`
}
type Language struct {
gorm.Model
Name string
}
db.Model(&user).Related(&languages, "Languages")
SELECT * FROM "languages" INNER JOIN "user_languages" ON "user_languages"."language_id" = "languages"."id" WHERE "user_languages"."user_id" = 111