Golang Gorm 未从关联 table 中检索数据

Golang Gorm not retrieving data from associated table

我正在使用 Gorm 和 MySQL 开发 Gin 应用程序。为了在 Gorm 模型中定义 belongs to 关系,您必须执行以下操作(示例来自 Gorm 文档):

// `User` belongs to `Company`, `CompanyID` is the foreign key
type User struct {
  gorm.Model
  Name      string
  CompanyID int
  Company   Company
}

type Company struct {
  ID   int
  Name string
}

这就是我对我的模型所做的:

type Record struct {
    Barcode string `json:"barcode" gorm:"size:48;unique;not null" sql:"index"`
    Name    string `json:"name" gorm:"size:160;unique;not null"`
    ArtistID   uint     `json:"artist_id"`
    Artist     Artist   `gorm:"foreignKey:ArtistID;references:ID"`
    CategoryID uint     `json:"category_id"`
    Category   Category `gorm:"foreignKey:CategoryID;references:ID"`

    NumOfRecords        int         `json:"num_of_records" gorm:"not null"`
    OriginalReleaseDate *utils.Date `json:"original_release_date" gorm:"default:null;type:date"`
    ReissueReleaseDate  *utils.Date `json:"reissue_release_date" gorm:"default:null;type:date"`
    SideColor           *string     `json:"side_color" gorm:"default:null"`
    BarcodeInRecord     *bool       `json:"barcode_in_record" gorm:"default=true"`
    gorm.Model
}
type Category struct {
    Name        string `json:"name" gorm:"size:60;unique;not null"`
    Description string `json:"description" gorm:"size:120"`
    Parent      uint   `json:"parent" gorm:"default:null"`
    Active      bool   `json:"active" gorm:"default:true"`
    gorm.Model
}
type Artist struct {
    Name            string `json:"name" gorm:"size:120;unique;not null"`
    Type            string `json:"type" gorm:"default:null"`
    CountryOfOrigin string `json:"countryOfOrigin" gorm:"default:null"`
    gorm.Model
}

然而,当取回数据时,这两个关联并未被填充:

{
    "data": {
        "barcode": "1231231231231292",
        "name": "ABCD 12342",
        "artist_id": 2,
        "Artist": {
            "name": "",
            "type": "",
            "countryOfOrigin": "",
            "ID": 0,
            "CreatedAt": "0001-01-01T00:00:00Z",
            "UpdatedAt": "0001-01-01T00:00:00Z",
            "DeletedAt": null
        },
        "category_id": 9,
        "Category": {
            "name": "",
            "description": "",
            "parent": 0,
            "active": false,
            "ID": 0,
            "CreatedAt": "0001-01-01T00:00:00Z",
            "UpdatedAt": "0001-01-01T00:00:00Z",
            "DeletedAt": null
        },
        "num_of_records": 2,
        "original_release_date": "1965-02-24",
        "reissue_release_date": null,
        "side_color": null,
        "barcode_in_record": null,
        "ID": 1,
        "CreatedAt": "2022-04-25T12:53:32.275578-04:00",
        "UpdatedAt": "2022-04-25T12:53:32.275578-04:00",
        "DeletedAt": null
    }
}

知道那里发生了什么吗?

将数据保存到数据库的代码是什么样的?

我猜你可能需要使用 FullSaveAssociations 像这样:


DB().Session(&gorm.Session{FullSaveAssociations: true}).Save(&d)

要取回数据,您需要使用 Preloads。


DB().Preload("Artist").Preload("Category").First(&d)

你也可以使用

.Preload(clause.Associations)

加载它们。您可以将其与其他预加载一起使用以更深入。

https://gorm.io/docs/preload.html#content-inner