这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
马上要开始规划大项目了,在学习gorm的过程中总结一下常见依赖表的创建.
创建一张平平无奇的表
gorm建表默认以ID字段作为主键. 同种类型和他的指针类型在数据库中存储时没有区别,除了原类型不允许有空值null,而指针类型允许.
type Student struct {
ID uint
Name string
Email *string
}
字段约束
用结构体tag来约束字段如Name string gorm:"type:varchar(12);size:4".
常见的有:
- type 定义字段类型
- size 定义字段大小
- column 自定义列名
- primaryKey 将列定义为主键
- unique 将列定义为唯一键
- default 定义列的默认值
- not null 不可为空
- embedded 嵌套字段
- embeddedPrefix 嵌套字段前缀
- comment 注释
创建1对1关系表
例如每个用户有一个详细信息表.注意所有的外键引用要保持数据类型的一致,比如User的ID是size:4,那么UserInfo的UserID必须是size:4.
type User struct {
ID uint
UserInfo UserInfo // 通过这个字段来获取详细信息
}
type UserInfo struct {
UserID uint // 外键
ID uint
Name string
Age int
Gender bool
}
创建1对多关系表
例如一个用户有多篇原创文章.
type User struct {
ID uint
Name string
Articles []Article // 通过这个字段来获取多篇文章信息
}
type Article struct {
ID uint
Title string
UserID uint // 外键
User User // 通过这个字段来反向获取用户信息
}
创建多对多关系表
例如文章和tag的关系,一篇文章有很多的tag,而一个tag也标记了不同的文章.这里必须用标签many2many:article_tags指明多对多关系.
type Tag struct {
ID uint
Name string
Articles []Article `gorm:"many2many:article_tags;"` // 用于tag反向引用文章
}
type Article struct {
ID uint
Title string
Tags []Tag `gorm:"many2many:article_tags;"` //文章引用tag
}
关于键有关的tag
- primaryKey 指明主键
- foreignKey 指明外键
- joinForeignKey 连接的主键id
- JoinReferences 关联的主键id