大概就是这个样子,主要要在 Model 里定义好两个 model 的关系,然后查询 User 的时候 Prelod 下 UserInfo 就可以了..或者 拿到一个已有的 model 对象去 Related 他的关联对象;区别就是 related是取值到一个指定结构里,Preload 是取值到原有结构里的对象上
type User struct {
Uid uint64 `gorm:"column:uid;primary_key"`
Username string `gorm:"column:username;type:varchar(50);"
Status bool `gorm:"column:status;type:int(10)"`
UserInfo UserInfo `gorm:"ForeignKey:Uid;AssociationForeignKey:UserId"`
}
func(User)TableName() string {
return "user"
}
type UserInfo struct {
Id uint64 `gorm:"column:id;primary_key"`
UserId uint64 `gorm:"column:user_id;type:bigint(20)"`
Age uint64 `gorm:"column:age;type:int(10)"`
Openid string `gorm:"column:openid;type:varchar(250)"`
}
func(UserInfo)TableName()string{
return "user_info"
}
orm,_ := gorm.Open(.....,.....)
//使用一,preload
var user User
orm.Model(User{}).Preload("UserInfo").Find(&user,1001)
fmt.Println(user.UserInfo.Age)
//使用二 relate
var u User
var userInfo UserInfo
orm.Find(&u,1001)
orm.Model(&u).Related(&userInfo)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…