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)
加载它们。您可以将其与其他预加载一起使用以更深入。
我正在使用 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)
加载它们。您可以将其与其他预加载一起使用以更深入。