前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gorm之Has Many与Has One

gorm之Has Many与Has One

作者头像
大话swift
发布2020-03-25 17:45:47
7430
发布2020-03-25 17:45:47
举报
文章被收录于专栏:大话swift大话swift

我们在日常工作当中经常遇到一对一和一对多的关系,那么在gorm中我们是怎么使用的呢?听我细细道来。 首先我们定义email、user和mobile三张表,他们对应的结构体如下:

Email表

代码语言:javascript
复制
package models
type Email struct {ModelAddress stringUserId uint}

Mobile表

代码语言:javascript
复制
package models
type Mobile struct {ModelAddress string `json:"address"`UserId uint}

user表

代码语言:javascript
复制
package models
type User struct {ModelName stringAge uintMobile MobileEmailSlice []Email}

主程序

代码语言:javascript
复制
package main
import ("ginLearn.com/models")
func main() {db := models.DB()user := models.User{}user.ID = 1mobile := models.Mobile{}//一个人拥有一个手机号码//SELECT * FROM `mobiles` WHERE `mobiles`.`deleted_at` IS NULL AND ((`user_id` = 1))//我们手动指定了关联字段//自定关联字段db.Model(&user).Related(&mobile, "userId")//自动关联//db.Model(&user).Related(&mobile)

//一个人拥有多个邮箱//一对多的情况要定义一个切片var emailSlice []models.Email//自定关联字段// SELECT * FROM `emails` WHERE `emails`.`deleted_at` IS NULL AND ((`user_id` = 1))db.Model(&user).Related(&emailSlice, "userId")//自动关联//db.Model(&user).Related(&emailSlice)}

一对一和一对多的关系并不复杂,就像示例当中,我们只需要明确对应关系,gorm会自动给我们找到对应关系。这里需要强调一下一对多的使用。

代码语言:javascript
复制
//一对多的情况要定义一个切片var emailSlice []models.Email//自定关联字段// SELECT * FROM `emails` WHERE `emails`.`deleted_at` IS NULL AND ((`user_id` = 1))db.Model(&user).Related(&emailSlice, "userId")

一定不要忘记了,一对多返回的应该是个切片,如果你不传入切片,那么gorm会把把结果的最后一个值放进切片中给你返回!

链接:https://pan.baidu.com/s/1DRyMeG0Cwz3BWIyGWPhDNw

提取码:ek0b

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档