migration.stub模版调整

目前migration.stub里面是固定的结构体,新创建迁移表后,还需要手动修改新创建的迁移文件。对模版文件进行如下调整。

func init() {

    type {{StructName}} struct {
        models.BaseModel

        Name     string `gorm:"type:varchar(255);not null;index"`
        Email    string `gorm:"type:varchar(255);index;default:null"`
        Phone    string `gorm:"type:varchar(20);index;default:null"`
        Password string `gorm:"type:varchar(255)"`

        models.CommonTimestampsField
    }

    up := func(migrator gorm.Migrator, DB *sql.DB) {
        migrator.AutoMigrate(&{{StructName}}{})
    }

    down := func(migrator gorm.Migrator, DB *sql.DB) {
        migrator.DropTable(&{{StructName}}{})
    }

    migrate.Add("{{FileName}}", up, down)
}

migration.stub模版调整

同时,对migration命令进行小修改,传入两个参数,第一个参数用途不变,第二个参数用于传入迁移模版文件,对结构体部分的变量赋值。

var CmdMakeMigration = &cobra.Command{
    Use:   "migration",
    Short: "Create a migration file, example: make migration add_users_table",
    Run:   runMakeMigration,
    Args:  cobra.ExactArgs(2),
}

func runMakeMigration(cmd *cobra.Command, args []string) {
    // 日期格式化
    timeStr := app.TimenowInTimezone().Format("2006_01_02_150405")

    model := makeModelFromString(args[0])
    st := makeModelFromString(args[1])

    fileName := timeStr + "_" + model.PackageName
    filePath := fmt.Sprintf("database/migrations/%s.go", fileName)
    createFileFromStub(filePath, "migration", st, map[string]string{"{{FileName}}": fileName})

    console.Success("Migration file created,after modify it, use `migrate up` to migrate database.")
}

migration.stub模版调整

migration.stub模版调整

结构题里面的内容就需要进行修改一下了
migration.stub模版调整

讨论数量: 1

嗯 的确是需要这么弄一下。这样只需要修改生成的 migrations 中的 struct 部分就可以了。

我是这么改的。

    model := makeModelFromString(args[0])
    modelName := args[1]

    fileName := timeStr + "_" + model.PackageName
    filePath := fmt.Sprintf("database/migrations/%s.go", fileName)
    createFileFromStub(filePath, "migration", model, map[string]string{"{{FileName}}": fileName, "{{ModelName}}": modelName})

然后 stub 中

…
func init() {

    type {{ModelName}} struct {
        models.BaseModel

是在后边生成其他迁移文件的时候发现的,才回过来看了一下。

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!