我正在嘗試使用gorm和自定義表實現兩個模型之間的連接。在此自定義表中,我想存儲有關連接模型的額外信息。根據文檔,我有以下內容,func init() { database.DB.SetupJoinTable(&Foo{}, "Bar", &FooBar{})}type Foo struct { UUID uuid.UUID `json:"uuid" gorm:"type:uuid;primaryKey;"` SomeValue string `json:"someValue"` Bars []Bar `json:"bars" gorm:"many2many:foo_bars"`}type Bar struct { UUID uuid.UUID `json:"uuid" gorm:"type:uuid;primaryKey;"` SomeValue string `json:"someValue"`}type FooBar struct { FooUUID uuid.UUID `json:"foo" gorm:"primaryKey"` BarUUID uuid.UUID `json:"bar" gorm:"primaryKey"` ExtraValue string `json:"extraValue"`}正如我所期望的那樣,上面創建了一個架構。問題是在嘗試保留此關系并將所需的額外數據設置為 時。這些文檔提供了有關將關系直接從 Foo 追加到 Bar 的文檔,但不會將數據添加到此自定義表中。FooBar文檔指出:JoinTable可以是一個功能齊全的模型所以我希望這是可能的。使用gorm可以做到這一點嗎?如何創建和保存此關系以及其他信息?
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
這實際上非常簡單,這是一個功能齊全的模型,這意味著您可以使用它直接與連接表進行交互,就像任何其他模型一樣:FooBar
// assuming we have a Foo foo and Bar bar
// read
links := []FooBar{}
db.Where(FooBar{FooUUID: foo.UUID, BarUUID: bar.UUID}).Find(&links)
// create
link := FooBar{FooUUID: foo.UUID, BarUUID: bar.UUID, ExtraValue: "foobar"}
db.Create(&link)
// update
link.ExtraValue = "foobarbaz"
db.Save(&link)
// delete
db.Delete(&link)
但是,要完成所有這些操作,您需要將聯接表視為單獨的模型。例如,您不應該期望能夠在Foo上執行常規關聯操作時提取,因為字段上實際上沒有空間來放置值。保存 也是如此,除非你用 Hooks 做一些特殊的伎倆(有關此內容的更多信息,請參閱此答案)。ExtraValue[]BarExtraValue
- 1 回答
- 0 關注
- 334 瀏覽
添加回答
舉報
0/150
提交
取消