在使用 gorm 進行資料庫操作時,有時候我們可能需要將結果表的列名從「多」更改為「多」。這樣做可以讓我們的程式碼更加清晰易讀,提高程式碼的可維護性。那麼,在 gorm 中如何實現這個功能呢?在本文中,php小編草莓將為大家分享一個簡單有效的方法,幫助你輕鬆實現結果表列名的修改。
我已經使用 typeorm 玩了很多 nestjs,現在我正在學習使用 golang 和 gorm。我正在 nestjs for go 中重建系統,在使用多對多關係時遇到問題。由於我正在使用已經在生產中並已填充的資料庫,因此我需要對結構進行與其他項目相同的建模,這樣就不會出現問題。
我有兩個以多種方式關聯的表,它們是播放清單和流派,在生產資料庫中它們產生playlists_genres > 具有以下字段的表格:
請注意,這些欄位類似於 playlistsid 和 genresid
#在 golang 專案中,表格的 m2m 結果如下:
請注意,產生的欄位與我需要的不同,我需要為生產中的資料庫產生標識符,即 playlistsid 和 genresid。
我的關係程式碼如下所示:
type playlist struct { id int32 `json:"id" gorm:"primarykey;autoincrement:true"` status bool `json:"status" gorm:"not null;default:false"` createdat time.time `json:"createdat" gorm:"column:created_at;autocreatetime:milli;type:timestamp without time zone;default:now();not null"` updatedat time.time `json:"updatedat" gorm:"column:updated_at;autoupdatetime:milli;type:timestamp without time zone;default:now();not null"` genres []genre `json:"genres" gorm:"many2many:playlists_genres"` }
和
type Genre struct { ID int32 `json:"id" gorm:"primaryKey;autoIncrement:true"` Name string `json:"name" gorm:"not null;type:varchar(255)"` Playlists []Playlist `json:"playlists" gorm:"many2many:playlists_genres"` }
我查了很多資料,除了手動建立一個中間表,其中包含我需要的名稱的列並將其從一個到多個關聯之外,我還沒有找到更改這些列名稱的方法。
你能幫我解決這個問題嗎?是否可以在不手動建立表的情況下執行此操作?謝謝!
不幸的是,我認為實現您的目標的唯一方法是建立一個名為 PlaylistGenre
的結構並覆寫此處的列名稱。
使用 Gorm 約定,您只能對資料庫中建立的外鍵約束進行操作。沒有機會覆蓋自動建立的連接表的實際列名。
在gorm
註解中,您可以使用這些屬性來處理外鍵:foreignKey
、references
、joinForeignKey
和joinReferences
。
但是,您需要使用column
,這裡是不可能的。
如果您需要這種方法的範例,請告訴我!
以上是如何在 gorm 中將結果表的列名從'多”更改為'多”的詳細內容。更多資訊請關注PHP中文網其他相關文章!