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個贊
不,我不認為有一個簡單的選擇來做到這一點。
您需要枚舉表上的所有列,檢查它們是否存在,然后將其刪除。
您還需要枚舉現有關系和索引,如果它們不存在,則根據需要將其刪除。
如果你最終寫了它,我認為你可以編寫自己的函數,該函數采用接口并運行自動遷移??梢栽诂F有代碼中獲取遷移器接口,并將其傳遞給函數。也許有人在某個地方寫了這樣的函數!AutoMigrate
gorm.Migrator
db.Migrator()
- 2 回答
- 0 關注
- 99 瀏覽
添加回答
舉報