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

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

Gorm使用自定義表格和額外數據創建多對多關系

Gorm使用自定義表格和額外數據創建多對多關系

Go
慕斯709654 2022-08-09 16:57:15
我正在嘗試使用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


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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