有的小伙伴说,我没有女朋友怎么办?new一个对象出来!
那么我们gorm中怎么建立这种属于关系呢?又是怎么表示的呢?为了照顾有些小伙伴的情绪,我们一用户和邮箱、用户和手机号为例。 用户表结构
package models
type User struct { Model Name string Age uint}
邮箱表结构
package models
type Email struct { Model Address string `json:"address"` User User `json:"user"` UserId uint `json:"userId"` //默认的关联字段}
那么当我们知道了用户的信息就可以根据用户的信息关联查询到用户的邮箱 有的时候我们需要手动指定关联关系,那么我们可以这么做
package models
type Mobile struct { Model Address string `json:"address"` User User `json:"user" gorm:"foreignkey:UserReferId"` // //指定UserReferId为关联字段 UserReferId uint `json:"userReferId"` //自定义的关联字段}
查询示例
package main
import ( "ginLearn.com/models")
func main() { db := models.DB() user := models.User{} user.ID = 1 email := models.Email{}
//邮箱属于用户 //SELECT * FROM `emails` WHERE `emails`.`deleted_at` IS NULL AND ((`user_id` = 1)) db.Model(&user).Related(&email)
mobile := models.Mobile{} //手机号码属于用户 //SELECT * FROM `mobiles` WHERE `mobiles`.`deleted_at` IS NULL AND ((`user_refer_id` = 1)) //我们手动指定了关联字段 db.Model(&user).Related(&mobile, "UserReferId")
//我们通过关联关系可以更改对应的信息 //例如 这里我们知道了邮箱,编辑邮箱信息的时候可以直接更新用户信息,只需要赋值就好,gorm会自动帮我们处理 user.Name = "hanyun" user.Age = 31 mobile.User = user mobile.Address = "15388888888" //由于关联关系的存在,同时执行了两部操作 //UPDATE `users` SET `updated_at` = '2020-03-21 17:56:12', `deleted_at` = NULL, `name` = 'hanyun', `age` = 31 WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 1 // UPDATE `mobiles` SET `updated_at` = '2020-03-21 17:56:12', `deleted_at` = NULL, `address` = '15388888888', `user_refer_id` = 1 WHERE `mobiles`.`deleted_at` IS NULL AND `mobiles`.`id` = 1 db.Save(&mobile)}
链接:https://pan.baidu.com/s/1UMytsYxPdf3i5Go4tZs8aA 提取码:3lyg