关于beego - bee migrate

最近在学go语言,使用beego开发一个考试系统
涉及到数据库迁移部分,使用

bee generate migration users

然后对生成的迁移文件进行编辑后:

func (m *Users_20210403_163418) Up() {
    // use m.SQL("CREATE TABLE ...") to make schema update
    m.CreateTable("users", "innodb", "utf8mb4")
    m.PriCol("id").SetAuto(true).SetDataType("int").SetUnsigned(true)
    //####中间部分省略
    m.NewCol("deleted_at").SetDataType("timestamp").SetNullable(true)
    m.NewCol("created_at").SetDataType("timestamp").SetDefault("NOW()")
    m.NewCol("updated_at").SetDataType("timestamp").SetNullable(false).SetDefault("NOW()")
    m.SQL(m.GetSQL())
}

// Reverse the migrations
func (m *Users_20210403_163418) Down() {
   m.SQL("DROP TABLE IF EXISTS users")
}

执行bee migrate -conn="root:123456@tcp(127.0.0.1:3306)/exam"
然后使用rollback回滚代码后再执行,发现表不再生成了,控制台提示的也是没有更新

2021/04/05 09:04:16 INFO     ▶ 0001 Using 'mysql' as 'driver'
2021/04/05 09:04:16 INFO     ▶ 0002 Using '/Users/recminy/go/examination/database/migrations' as 'dir'
2021/04/05 09:04:16 INFO     ▶ 0003 Running all outstanding migrations
2021/04/05 09:04:18 INFO     ▶ 0004 |> 2021/04/05 09:04:16.857 [I]  total success upgrade: 0  migration
2021/04/05 09:04:18 SUCCESS  ▶ 0005 Migration successful!

,以前在使用Laravel时候,都是:
php artisan make:migration
php artisan migrate
php artisan migrate:rollback
即可。
bee migrate工具这个为什么回滚后再次迁移时候不再次创建表了,是使用上有什么不对的地方么?
还有一点就是bee migrate rollback 每次只能回滚一条migration,这个好想有点恶心,是否能像laravel一样按migrate的时间生成一个batch批次而不是只回滚最后一条记录,如果单次操作多个表的时候得多次执行命令?

讨论数量: 2

bee migration的功能跟laravel比起来少很多,不能定义字段备注,都想回去用laravel的迁移单独搞数据库了 :joy:

2年前 评论
Alcohol 2年前

还发现一个问题

m.NewCol("deleted_at").SetDataType("timestamp").SetNullable(true)

的时候SetNullable 为true的时候实际不会生效,看了ddl源码

func (c *Column) SetNullable(null bool) *Column {
    if null {
        c.Null = ""

    } else {
        c.Null = "NOT NULL"
    }
    return c
}

这样实际不会生效,最终生成的表还是not null

2年前 评论

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