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

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

golang,在 2 個模型之間創建關系并使用 gorm 通過 Preload 檢索它們

golang,在 2 個模型之間創建關系并使用 gorm 通過 Preload 檢索它們

Go
一只名叫tom的貓 2022-05-10 17:06:18
我正在使用 gqlgen 和 gorm 作為 orm 學習 golang,我正在創建一個使用 2 個模型用戶和消息的應用程序,其中用戶有一個消息列表,并且消息有發送者和接收者。我使它們如下所示type User struct {    ID        string     `json:"id" gorm:"primary_key;type:uuid;default:uuid_generate_v4()"`    Username  string     `json:"username"`    Email     string     `json:"email"`    FirstName string     `json:"firstName"`    LastName  string     `json:"lastName"`    Messages  []*Message `json:"messages"`    CreatedAt time.Time  `json:"created_at"`    UpdatedAt time.Time  `json:"updated_at"`    DeletedAt *time.Time `json:"deleted_at" sql:"index"`}type Message struct {    ID          string     `json:"id" gorm:"primary_key;type:serial"`    Title       string     `json:"title"`    Body        string     `json:"body"`    DueDate     time.Time  `json:"dueDate"`    IsViewed    bool       `json:"isViewed" gorm:"default:false"`    SenderID    string     `json:"senderId" gorm:"type:uuid"`    Sender      *User      `json:"sender" gorm:"foreignkey:SenderID"`    RecipientID string     `json:"recipientId" gorm:"type:uuid"`    Recipient   *User      `json:"recipient" gorm:"foreignkey:RecipientID"`    CreatedAt   time.Time  `json:"created_at"`    UpdatedAt   time.Time  `json:"updated_at"`    DeletedAt   *time.Time `json:"deleted_at" sql:"index"`}當我使用 Preload 檢索消息數據時var messages []*models.Messageerr := db.    Preload("Sender").    Preload("Recipient").    Find(&messages).Errorif err != nil {    return nil, err}return messages, err它工作得很好,但我的問題是在嘗試檢索預加載消息的用戶時。var users []*models.Usererr := db.    Preload("Messages").    Find(&users).Errorif err != nil {    return nil, err}return users, err這給了我以下錯誤can't preload field Messages for models.User我知道如果有更好的組織方式,我可能會錯誤地設計我的架構,我將非常感激,在此先感謝。
查看完整描述

1 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

我認為您應該將消息分隔User到SentMessages和ReceivedMessages中。然后你可以像這樣指定外鍵User:


SentMessages      []*Message `gorm:"foreignkey:SenderID" json:"sentMessages"`

ReceivedMessages  []*Message `gorm:"foreignkey:RecipientID" json:"receivedMessages"`

然后將其用作以下內容:


var users []*models.User

err := db.

Preload("SentMessages").

Preload("ReceivedMessages").

Find(&users).Error

if err != nil {

  return nil, err

}

return users, err

應該可以按您的意愿工作


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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