抱歉!今天更新的有点晚!大清早就被拉起来改bug!给大家写点示例,避免采坑!希望大家都有一个愉快的周末!
大家在开发的过程经常面对“谁属于谁”的问题,例如:你的女朋友属于你。那么你怎么知道你的女朋友属于你呢?首先要在女朋友哪里打个标识属于你,那么就可以通过你找到你的朋友了。有的小伙伴比较悲催,需要手动在女朋友哪里打个标识,那么找到你再找你女票的话就需要指定标识。
有的小伙伴说,我没有女朋友怎么办?new一个对象出来!
那么我们gorm中怎么建立这种属于关系呢?又是怎么表示的呢?为了照顾有些小伙伴的情绪,我们一用户和邮箱、用户和手机号为例。 用户表结构
代码语言:javascript复制package models
type User struct { Model Name string Age uint}
邮箱表结构
代码语言:javascript复制package models
type Email struct { Model Address string `json:"address"` User User `json:"user"` UserId uint `json:"userId"` //默认的关联字段}
那么当我们知道了用户的信息就可以根据用户的信息关联查询到用户的邮箱 有的时候我们需要手动指定关联关系,那么我们可以这么做
代码语言:javascript复制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