2 回答

TA贡献1785条经验 获得超8个赞
你可以这样写一个函数:
func DropUnusedColumns(dst interface{}) {
stmt := &gorm.Statement{DB: DB}
stmt.Parse(dst)
fields := stmt.Schema.Fields
columns, _ := DB.Debug().Migrator().ColumnTypes(dst)
for i := range columns {
found := false
for j := range fields {
if columns[i].Name() == fields[j].DBName {
found = true
break
}
}
if !found {
DB.Migrator().DropColumn(dst, columns[i].Name())
}
}
}
用法:
DropUnusedColumns(&User{})

TA贡献2021条经验 获得超8个赞
不,我不认为有一个简单的选择来做到这一点。
您需要枚举表上的所有列,检查它们是否存在,然后将其删除。
您还需要枚举现有关系和索引,如果它们不存在,则根据需要将其删除。
如果你最终写了它,我认为你可以编写自己的函数,该函数采用接口并运行自动迁移。可以在现有代码中获取迁移器接口,并将其传递给函数。也许有人在某个地方写了这样的函数!AutoMigrate
gorm.Migrator
db.Migrator()
- 2 回答
- 0 关注
- 84 浏览
添加回答
举报