gorm 中如何每天创建新表?

yzhengwei · 2023-01-01 15:32:52 · 4753 次点击
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

把表结构创建语句导出sql,然后在定时任务中执行这个sql就行了呀

楼主的意思我明白,我个人认为工作就是完成任务,怎么简单怎么来

#2