Go开发
Go资源
Go学习文档: https://www.topgoer.com/
Go实战项目: https://github.com/flipped-aurora/gin-vue-admin
Go学习路径:https://mp.weixin.qq.com/s/DIIpLUrGj2_-7Qd6vu0kuA
Go编码规范:https://github.com/xxjwxc/uber_go_guide_cn#%E4%BB%8B%E7%BB%8D
GORM配置外键,满足关联查询
一句话总结外键查询配置:gorm:"foreignKey:关联表的结构体字段;references:当前表的结构体字段;
不需要配置数据表的外键,只需在Model中定义外键和引用就可以了。
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
type ProblemBasic struct {
ID uint `gorm:"primarykey;" json:"id"`
CreatedAt MyTime `json:"created_at"`
UpdatedAt MyTime `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index;" json:"deleted_at"`
Identity string `gorm:"column:identity;type:varchar(36);" json:"identity"` // 问题表的唯一标识
ProblemCategories []*ProblemCategory `gorm:"foreignKey:problem_id;references:id" json:"problem_categories"` // 关联问题分类表 ProblemCategory
Title string `gorm:"column:title;type:varchar(255);" json:"title"` // 文章标题
Content string `gorm:"column:content;type:text;" json:"content"` // 文章正文
MaxRuntime int `gorm:"column:max_runtime;type:int(11);" json:"max_runtime"` // 最大运行时长
MaxMem int `gorm:"column:max_mem;type:int(11);" json:"max_mem"` // 最大运行内存
PassNum int64 `gorm:"column:pass_num;type:int(11);" json:"pass_num"` // 通过次数
SubmitNum int64 `gorm:"column:submit_num;type:int(11);" json:"submit_num"` // 提交次数
}
type ProblemCategory struct {
ID uint `gorm:"primarykey;" json:"id"`
CreatedAt MyTime `json:"created_at"`
UpdatedAt MyTime `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index;" json:"deleted_at"`
ProblemId uint `gorm:"column:problem_id;type:int(11);" json:"problem_id"` // 问题的ID
CategoryId uint `gorm:"column:category_id;type:int(11);" json:"category_id"` // 分类的ID
CategoryBasic *CategoryBasic `gorm:"foreignKey:id;references:category_id;" json:"category_basic"` // 关联分类的基础信息表 CategoryBasic
}
type CategoryBasic struct {
ID uint `gorm:"primarykey;" json:"id"`
CreatedAt MyTime `json:"created_at"`
UpdatedAt MyTime `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index;" json:"deleted_at"`
Identity string `gorm:"column:identity;type:varchar(36);" json:"identity"` // 分类的唯一标识
Name string `gorm:"column:name;type:varchar(100);" json:"name"` // 分类名称
ParentId int `gorm:"column:parent_id;type:int(11);" json:"parent_id"` // 父级ID
}
查询ProblemBasic表记录时,得到的json数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
"code": 200,
"data": {
"id": 1,
"created_at": "2023-03-22 18:20:22",
"updated_at": "2023-03-22 18:42:47",
"deleted_at": null,
"identity": "1",
"problem_categories": [
{
"id": 1,
"created_at": "2023-03-22 18:26:33",
"updated_at": "2023-03-22 18:53:24",
"deleted_at": null,
"problem_id": 1,
"category_id": 1,
"category_basic": {
"id": 1,
"created_at": "2023-03-22 18:30:26",
"updated_at": "2023-03-22 18:53:34",
"deleted_at": null,
"identity": "1",
"name": "分类1",
"parent_id": 0
}
},
{
"id": 2,
"created_at": "2023-03-22 18:26:33",
"updated_at": "2023-03-22 18:53:24",
"deleted_at": null,
"problem_id": 1,
"category_id": 2,
"category_basic": {
"id": 2,
"created_at": "2023-03-22 18:30:26",
"updated_at": "2023-03-22 18:53:34",
"deleted_at": null,
"identity": "2",
"name": "分类2",
"parent_id": 0
}
}
],
"title": "题目1",
"content": "这是题目1的详细内容",
"max_runtime": 0,
"max_mem": 0,
"pass_num": 0,
"submit_num": 0
}
}
本文由作者按照 CC BY 4.0 进行授权