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

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

GORM 外鍵似乎沒有添加適當的字段

GORM 外鍵似乎沒有添加適當的字段

Go
慕標5832272 2023-02-21 16:50:45
我有以下模型:type Drink struct {    gorm.Model           // Adds some metadata fields to the table    ID         uuid.UUID `gorm:"type:uuid;primary key"`    Name       string    `gorm:"index;not null;"`    Volume     float64   `gorm:"not null;type:decimal(10,2)"`    ABV        float64   `gorm:"not null;type:decimal(10,2);"`    Price      float64   `gorm:"not null;type:decimal(10,2);"`    Location   Location  `gorm:"ForeignKey:DrinkID;"`}type Location struct {    gorm.Model           // Adds some metadata fields to the table    ID         uuid.UUID `gorm:"primary key;type:uuid"`    DrinkID    uuid.UUID    Name       string `gorm:"not null;"`    Address    string `gorm:"not null;type:decimal(10,2)"`    Phone      int    `gorm:"not null;type:decimal(10,0);"`}但是,當我運行該程序時,它會添加兩個表,但是 Drink 表中沒有位置字段。遷移后我的數據庫看起來像這樣,不管我之前是否刪除過表:我有一種潛移默化的感覺,這可能是因為我沒有使用 gorm 默認 ID,但如果是這種情況,誰能告訴我如何用 UUID 而不是 uint 以正確的方式覆蓋默認 ID?或者,如果這甚至不是問題,拜托,我已經為此工作了幾天,我真的不想走僅使用 gorm 提供的默認設置的“簡單”道路,我實際上想了解什么在這里進行以及如何正確地做我想做的事情。運行 API 時我沒有收到任何錯誤,并且遷移似乎也在運行,只是我定義的字段實際上沒有顯示在數據庫中,這意味著前端將無法正確添加數據。我想在這里發生的是在前端提供一個商店列表,當用戶添加飲料時,他們將不得不從該商店列表中進行選擇。添加的每種飲料只能有 1 個商店,因為不同商店的飲料價格會有所不同。所以從技術上講,飲料桌上會有很多“重復”的飲料,但連接到不同的位置。
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

  • 第一點是因為您正在使用自定義主鍵,所以您不應該使用它gorm.Model,因為它包含ID字段。參考

  • 第二點根據你的描述,store(location) 和 是一對多的關系drink。這意味著一家商店可以有多種飲料,但一種飲料應該只屬于一家商店。在one-to-many 關系中,旁邊應該有一個參考或關系 ID many 。這意味著你在drink表中的情況。那么你的結構應該是這樣的:

我的模型結構

type MyModel struct {

  CreatedAt time.Time

  UpdatedAt time.Time

  DeletedAt gorm.DeletedAt `gorm:"index"`

}

位置結構(商店)

type Location struct {

    MyModel

    ID         uuid.UUID `gorm:"primary key;type:uuid"`

    // other columns...

    Drinks     []Drink 

}

飲料結構

type Drink struct {

    MyModel

    ID         uuid.UUID `gorm:"type:uuid;primary key"`

    //other columns...

    LocationID   uuid.UUID// This is important

}

然后gorm會自動考慮drink表中的 LocationID 將引用位置表的 ID 字段。您還可以在 Location 結構的 Drinks 數組字段中明確指示它使用 gorm gorm:"foreignKey:LocationID;references:ID"。



查看完整回答
反對 回復 2023-02-21
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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