PeaceSheep's blog PeaceSheep's blog
首页
  • 分类
  • 标签
  • 归档
相关链接
提建议&咨询&赞赏
GitHub (opens new window)

PeaceSheep

以最简洁、易懂的话解决问题
首页
  • 分类
  • 标签
  • 归档
相关链接
提建议&咨询&赞赏
GitHub (opens new window)
  • C++

  • Python

  • Go

    • gin、gorm教程与踩坑

      • Gin获取请求参数
      • Gin开发后端——gorm外键实例
        • 说明
        • model层结构体设计
          • model层中创建函数
          • model层查询函数
  • java

  • 语言
  • Go
  • gin、gorm教程与踩坑
PeaceSheep
2022-03-20
目录

Gin开发后端——gorm外键实例

第一次接触Gin和Gorm,遇到了很多坑,分享出来让大家避免。

# 说明

有两个模型:User和Group。Group有一个Owner字段,Owner是指向User的外键。

# model层结构体设计

type UserModel struct {
	ID         int    `json:"id" gorm:"primary_key"`
	Username   string `gorm:"unique_index"`
	Name       string `json:"name"`
	Password   string `json:"password"`
	Validation string `json:"-"`
	Status     int    `json:"status"`
}
1
2
3
4
5
6
7
8
	ID      int    `json:"id" gorm:"primary_key"`
	Name    string `json:"name"`
	Desc    string `json:"desc"`
	OwnerID int
	Owner   UserModel `gorm:"Foreignkey:OwnerID"`
1
2
3
4
5

Group中的OwnerID会成为数据库的owner_id字段,成为实际起作用的外键。而Owner属性是用于关联查询的,不会出现在数据库字段中。

注意

请注意,官方说明加上注释gorm:"Foreignkey:OwnerID"可以在AutoMigrate的时候自动添加外键,但是根据本人亲自实验,没有自动添加,后来发现是自己使用了V1版本的GORM,文档是V2版本的...

在初始化数据库之后,使用DB.Model(&models.GroupModel{}).AddForeignKey("owner_id", "user_models(id)", "CASCADE", "CASCADE")添加外键关联。

该函数参数为:

  1. 数据库中需要创建外键的字段名(不是结构体中属性名)
  2. 外键关联的表(关联的字段)
  3. 删除的约束
  4. 更新的约束

# model层中创建函数

创建的过程中我们需要设置ownerID为需要指向的用户,但无需设置Owner属性,因为Owner属性是用于关联查询返回数据的。

# model层查询函数

需要注意的是直接使用DB.Where("id = ?", groupID).First(&group).Error这样的查询方式,gorm是不会自动填充user的,需要使用DB.Model(&group).Association("owner").Find(&group.Owner),其中owner是结构体中的属性,因为里面已经指定了该属性为外键,且字段为ownerid。因此使用该函数查询之后,会自动根据外键关联查询出owner并填充到结构体中。

编辑 (opens new window)
上次更新: 2025/04/15, 10:52:45
Gin获取请求参数
SSM简要介绍

← Gin获取请求参数 SSM简要介绍→

最近更新
01
ubuntu安装g++显示已有但是输入g++又找不到命令
04-15
02
使用cloudflare-r2搭建webdav
04-08
03
LLM聚合平台客户端对比
03-29
更多文章>
Theme by Vdoing | Copyright © 2022-2025 PeaceSheep
冀ICP备2022004632号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式