添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
独立的夕阳  ·  Go开发 | Notes·  5 天前    · 
爱看书的签字笔  ·  常用 Django QuerySet ...·  1 周前    · 
睿智的玉米  ·  How To Fix ...·  1 周前    · 
刚分手的跑步机  ·  Gophish-sending ...·  4 月前    · 
私奔的棒棒糖  ·  斯行健_百度百科·  5 月前    · 
苦闷的手术刀  ·  TypeScript ...·  5 月前    · 
眉毛粗的电梯  ·  Problem getting ...·  5 月前    · 

Gorm 关联查询 一对一关系(Has One)

Gorm 的关联查询(又叫连表查询)中的 Has One 关系是 一对一 关联关系的一种,通常用于描述一个 Model 拥有另外一个 Model。

Has One 很像属于(belongs to)关系,都是一对一关系,区别是 Has One 关系和属于关系,持有关联 Model 属性的关系是相反的,例如:A 关联 B,Has One 关系通常是 A 结构体持有 B 属性,belongs to 关系则是 B 结构体持有 A。

比如:每一个用户都有一张信用卡,下面以 Go Struct 表示表结构:

// 信用卡
type CreditCard struct {
  // 继承 gorm 的基础 Model,里面默认定义了 ID、CreatedAt、UpdatedAt、DeletedAt 4个字段
  gorm.Model
  Number   string
  UserID   uint // 外键
// 用户
type User struct {
  gorm.Model
  CreditCard   CreditCard // 持有信用卡属性(关联信用卡)

1. 外键

关联查询必须包含外键,默认情况下 Has One 关系的外键由持有关联属性的类型名 + 主键 组成外键名,如上例,User 关联 CreditCard 的外键就是 User + ID = UserID。

通过下面方式可以自定义外键:

type CreditCard struct { gorm.Model Number string UserName string // 外键 type User struct { gorm.Model // 通过标签将外键定义为:UserName CreditCard CreditCard `gorm:"foreignkey:UserName"`

2. 关联外键

默认情况下,保存 User 的时候,会自动将 User 的主键保存到外键 UserID 中,关联查询的时候,也会使用外键和关联外键进行关联进行查询,这里 User 的 ID 就是关联外键。

自定义关联外键的例子:

type CreditCard struct {
  gorm.Model
  Number string
  UID    string
type User struct {
  gorm.Model
  Name   `sql:"index"` // 关联外键
  // 自定义关联外键为:name
  CreditCard CreditCard `gorm:"foreignkey:uid;references:name"`

3. 关联查询例子

user := User{}
// 查询用户数据
//自动生成sql: SELECT * FROM `users`  WHERE (username = 'tizi365') LIMIT 1
db.Where("username = ?", "tizi365").First(&user)
fmt.Println(user)
var card CreditCard
////自动生成SQL: SELECT * FROM credit_cards WHERE user_id = 123; // 123 自动从user的ID读取
// 关联查询的结果会填充到card变量
db.Model(&user).Association("CreditCard").Find(&card)
                

下一章:Gorm框架 关联查询 一对多关系

Gorm 关联查询 一对多关系(Has Many):Gorm 关联查询(又叫连表查询)中的 Has Many 关系是 一对多 的关联关系,通常用于描述一个 Model 拥有多个 Model。外键:默认情况下,Gorm 使用持有关联属性的 类型名 + 主键ID 作为外键名。关联外键:外键和关联外键都是成对出现的,默认情况 Gorm 使用主键 ID,作为关联外键。

上一章:Gorm 关联查询 属于 下一章:Gorm框架 关联查询 一对多关系 页面加载耗时 0.00 毫秒·物理内存 68.4MB ·虚拟内存 1301.5MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。