关于gorm的preload方法笔记

1 篇文章 0 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

假设,有三张表的层级关系为 Audit–>User -->homePage (具体表结构请查看末尾的大标题)
像下面的方法,是取不到auditData.Auditor中的值的

var auditData Audit
global.GVA_DB.Model(&auditData).Where("id = 1").First(&auditData)

一、常规预加载

如果要拿到这个Auditor对象
举例我要查找Audit表中id为1的数据,并且要拿到Auditor字段中的数据

var auditData Audit
global.GVA_DB.Model(&auditData).Preload("Auditor").Where("id = 1").First(&auditData)

二、多级预加载

举例我要查找Audit表中id为1的数据,除了要拿到Auditor中的数据外,Auditor中HomePage的数据也要拿到。

var auditData Audit
global.GVA_DB.Model(&auditData).Preload("Auditor.HomePage").Where("id = 1").First(&auditData)

preload的原理
其实很简单,你要preload user表的数据,gorm就提前把这张表全部取出来,然后再执行First或Find这样的方法去查询主数据。最后把两种数据一一对应起来。

示例中的数据表结构体说明
假设有以下三张表的结构体

  1. homePage 主页表结构体
type HomePage struct {  
   global.GVA_MODEL  
   UserId uint    `json:"userId" gorm:"column:user_id;comment:'用户id'"` 
   Desc   string  `json:"desc" form:"desc" gorm:"column:desc;type:varchar(500);comment:主页描述 "` 
   Phone  string  `json:"phone" form:"phone" gorm:"column:phone;comment:联系电话"`  
   Email  string  `json:"email" form:"email" gorm:"column:email;comment:邮箱"`  
}  

func (HomePage) TableName() string {  
   return "home_page"  
}

这张表主要特点是有一个UserId,用来将单挑数据绑定到下面的User表中的某条数据。
2. User 用户表结构体

type User struct {  
   global.GVA_MODEL  
   Username string   `json:"userName" form:"userName"  gorm:"column:user_name;comment:用户登录名"`  
   HomePage HomePage `json:"homePage" gorm:"foreignkey:UserId"`  
}
func (User) TableName() string {  
   return "user"  
}

  1. Audit审批表结构体
type Audit struct {  
   global.GVA_MODEL  
   //提交人 
   SubmitterId uint `json:"submitterId" form:"submitterId" gorm:"column:submitter_id;comment: 申请单提交用户的id"`  
   Submitter   User `gorm:"foreignkey:SubmitterId"`  

   //审批人
   AuditorId uint `json:"auditorId" form:"auditorId" gorm:"column:auditor_id;comment:审批人id"`  
   Auditor   User `gorm:"foreignkey:AuditorId"`  
  
   AuditStatus uint `json:"auditStatus" form:"auditStatus" gorm:"column:audit_status;comment:审批状态:1未通过 2已通过 3待审核 "`  
}
func (Audit) TableName() string {  
   return "audit"  
}

里面的Submitter和Auditor通过gorm的Belongs To关联到了User表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值