
GORM 按结构体建指定名字的表
最近在开发 QQ 机器人和它的管理面板,数据库用 GORM。
大学习的完成情况是按群记的,我的设计是每个群一张表,表名就是群号。表的结构都一样:QQ 号、名字、完成状态、截图地址。
GORM 平时建表用 AutoMigrate(&user{}),表名由结构体名推出来,user 会建成 users。一个结构体只对应一张表,没办法用同一个结构体建出一堆名字不同的表。
db.Table(name) 可以在这一次操作里临时指定表名,后面接 Migrator().CreateTable() 就按指定的名字建表,结构还是从结构体来。
// 结构体
type user struct {
QQ int64 `json:"qq"`
Name string `json:"name"`
Comp int `json:"comptype"`
Url string `json:"url,omitempty"`
}
// gorm 新建一个user结构的表
// database 为 *gorm.DB 类型
func createTable(groupId string) error {
err := database.Table(groupId).Migrator().CreateTable(&user{})
return err
}
机器人加进一个新群时调用 createTable(群号),这个群就有自己的表了。Table() 只对这一条链式调用生效,不改全局,所以之后对这个群的查询和写入也都要带上 database.Table(groupId),不带的话 GORM 又会去找 users 表。
头图/Cover
Photo by Simeon Maryska on Pexels
评论
评论加载中…