gorm之Belongs To--属于

379 阅读2分钟

大家在开发的过程经常面对“谁属于谁”的问题,例如:你的女朋友属于你。那么你怎么知道你的女朋友属于你呢?首先要在女朋友哪里打个标识属于你,那么就可以通过你找到你的朋友了。有的小伙伴比较悲催,需要手动在女朋友哪里打个标识,那么找到你再找你女票的话就需要指定标识。

有的小伙伴说,我没有女朋友怎么办?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)
}

链接:pan.baidu.com/s/1UMytsYxP… 提取码:3lyg 复制这段内容后打开百度网盘手机App,操作更方便哦