使用 gin + gorm,会按时每天创建新表或通过前端提交的信息创建新表,这些表结构不变,只是表名不同,怎么在 gorm 里创建关系映射呢?
```go
type Daily struct {
ID int64 `json:"id" gorm:"column:id;primaryKey"`
Name string `json:"name" gorm:"column:name"`
}
// TodayName 今天的表名
func (d Daily) TodayName() func(*gorm.DB) *gorm.DB {
return d.DateName(time.Now())
}
// TomorrowName 明天的表名
func (d Daily) TomorrowName() func(*gorm.DB) *gorm.DB {
date := time.Now().Add(24 * time.Hour)
return d.DateName(date)
}
// DateName 根据时间生成对应的表名,表名规则:daily_yyyy_MM_dd
func (Daily) DateName(date time.Time) func(*gorm.DB) *gorm.DB {
return func(tx *gorm.DB) *gorm.DB {
name := date.Format("daily_2006_01_02")
return tx.Table(name)
}
}
// 定时任务提前一天建好表
var daily1 Daily
db.Scopes(daily1.TomorrowName()).AutoMigrate(&daily1)
// 查询一条今日数据
var daily2 Daily
db.Scopes(daily2.TodayName()).First(&daily2)
```
#4
更多评论
https://gorm.io/zh_CN/docs/conventions.html
实现Tabler接口即可,再搞个定时任务每天执行migrate
#1