我使用gorm映射我的数据库。
我有两个表(service
和resource
),具有多对多关系。我在代码中对它们进行建模:
type Service struct {
BaseModel
Name string `gorm:"not null;unique_index"`
Resources []Resource `gorm:"many2many:service_resource"`
}
type Resource struct {
BaseModel
Name string `gorm:"not null;unique_index"`
}
使用gorm的AutoMigrate创建了以下表格:
(我还执行了原始SQL查询以在映射表中添加id主键。)
要创建新服务,请使用以下代码:
service := Service{
Name: "core",
Resources: []Resource{
{Name: "ec2"},
{Name: "dynamo"},
},
}
db.Create(&service)
这会创建所有资源以及服务,并按照预期在service_resource
表中填写它们之间的关系。
然而,我的问题是当我查询服务时。我使用以下代码检索所有服务:
services := []model.Service{}
db.Find(&services)
这将成功返回填充的services数组,但每个服务的Resources
数组为空:
"services": [
{
"ID": 1,
"Name": "core",
"Resources": null
},
...
]
我假设gorm会自动填充它。我缺少一些步骤吗?
答案 0 :(得分:3)
在查询服务之前,您需要Preload资源字段:
services := []model.Service{}
db.Preload("Resources").Find(&services) // error checking ommited
这会正确填充每项服务的Resources
字段。