关于 GORM 有些与常规 ORM 不同的基本概念,理解这些概念对于使用 GROM 函数会有很大帮助,而不是简单使用 RAW SQL 实现。
简介
假设有用户以及对应的角色信息,这是多对多的关系,也就是用户可以有多个角色,某个角色也会映射多个用户,那么就有如下的结构体。
type User struct {
ID uint `gorm:"primarykey"`
Name string
Roles []*Role `gorm:"many2many:map_user_role"`
}
type Role struct {
ID uint `gorm:"primarykey"`
Name string
Users []*User `gorm:"many2many:map_user_role"`
}
最大的不同是在 User 结构体里嵌套了 Role 结构体,传统 SQL 中相互关联的概念在 GROM 里成了相互拥有的概念。现在的关键就是如何从一个结构体出发获取另外的结构体,这里一步步介绍其基本概念和使用方法。
外键
假设某个用户的住址详细信息通过另外一个表保存,也就是在一个 address 表中,然后在 User 结构体内保存了对应地址的 ID 信息,定义如下。
type User struct {
ID uint `gorm:"primarykey"`
Name string
AddrID uint
Addr *Address
}
type Address struct {
ID uint `gorm:"primarykey"`
City string
}
这里就是怎么通过 User 结构体 (包含对应的 AddrID 信息) 去 address 表中查找 Address 对象,而在 address 表中。