migrator.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Package: migrate 操作对象
  2. // 负责创建 migrations 数据表,以及执行迁移操作。
  3. package migrate
  4. import (
  5. "github.com/runningwater/gohub/pkg/database"
  6. "gorm.io/gorm"
  7. )
  8. // Migrator 结构体用于存储迁移器的相关信息。
  9. type Migrator struct {
  10. Folder string // Folder 是存储迁移文件的目录名。
  11. DB *gorm.DB // Db 是数据库连接对象。
  12. Migrator gorm.Migrator // Migrator 是 GORM 的迁移器对象。
  13. }
  14. func (m *Migrator) createMigrationsTable() {
  15. migration := Migration{}
  16. if !m.Migrator.HasTable(&migration) {
  17. // 如果表不存在,则创建表
  18. m.Migrator.CreateTable(&migration)
  19. }
  20. }
  21. // Migration 对应数据表 migrations 里的一条记录
  22. type Migration struct {
  23. ID uint64 `gorm:"primaryKey;autoIncrement;"`
  24. Migration string `gorm:"type:varchar(255);not null;unique;"`
  25. Batch int
  26. }
  27. func NewMigrator() *Migrator {
  28. migrator := &Migrator{
  29. Folder: "database/migrations",
  30. DB: database.DB,
  31. Migrator: database.DB.Migrator(),
  32. }
  33. migrator.createMigrationsTable()
  34. return migrator
  35. }