亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用自動遷移刪除未使用的列

使用自動遷移刪除未使用的列

Go
慕桂英3389331 2022-08-01 15:27:36
我已經開始與夢幻般的圖書館GORM合作。自動遷移工作完美,但在文檔中,我閱讀了注釋“它不會刪除未使用的列以保護您的數據”。我可以跳過此規則嗎?換句話說,我是否可以在gorm配置中添加/更改某些內容,以便有機會使用自動遷移刪除未使用的列?
查看完整描述

2 回答

?
慕的地10843

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{})


查看完整回答
反對 回復 2022-08-01
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

不,我不認為有一個簡單的選擇來做到這一點。

以下是自動遷移源:https://github.com/go-gorm/gorm/blob/59730417aabd5b510d66d9d923d265a6fc0195a0/migrator/migrator.go#L83-L153

您需要枚舉表上的所有列,檢查它們是否存在,然后將其刪除。

您還需要枚舉現有關系和索引,如果它們不存在,則根據需要將其刪除。

如果你最終寫了它,我認為你可以編寫自己的函數,該函數采用接口并運行自動遷移??梢栽诂F有代碼中獲取遷移器接口,并將其傳遞給函數。也許有人在某個地方寫了這樣的函數!AutoMigrategorm.Migratordb.Migrator()


查看完整回答
反對 回復 2022-08-01
  • 2 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號