GORM协会
GORM Associations
鉴于已在数据库中创建了以下数据结构,并且相应表中的行中存在有效数据:-
type Deployment struct {
gorm.Model
Name string `gorm:"unique_index:idx_name"`
RestAPIUser string
RestAPIPass string
Servers []Server
model *Model
}
type Server struct {
gorm.Model
DeploymentID uint
Hostname string `gorm:"unique_index:idx_hostname"`
RestPort string
Version string
}
我正在尝试 select 所有部署并让 GORM 自动为每个部署填充服务器。
不幸的是,它不会这样做。我已经尝试了几种使用 Associations() 函数的变体,但我似乎无法让它工作。我似乎必须手动执行此操作:-
func (m *Model) GetDeployments() ([]Deployment, error) {
deployments := []Deployment{}
err := m.db.Find(&deployments).Error
if err != nil {
return nil, err
}
deploymentsWithServers := []Deployment{}
for _, d := range deployments {
servers := []Server{}
err := m.db.Model(&d).Association("Servers").Find(&servers).Error
if err != nil {
return nil, err
}
d.Servers = servers
deploymentsWithServers = append(deploymentsWithServers, d)
}
return deploymentsWithServers, nil
}
有没有人对我如何让 GORM 自动填充服务器字段有任何建议?谢谢!
尝试
m.db.Preload("Servers").Find(&Deployment{})
鉴于已在数据库中创建了以下数据结构,并且相应表中的行中存在有效数据:-
type Deployment struct {
gorm.Model
Name string `gorm:"unique_index:idx_name"`
RestAPIUser string
RestAPIPass string
Servers []Server
model *Model
}
type Server struct {
gorm.Model
DeploymentID uint
Hostname string `gorm:"unique_index:idx_hostname"`
RestPort string
Version string
}
我正在尝试 select 所有部署并让 GORM 自动为每个部署填充服务器。
不幸的是,它不会这样做。我已经尝试了几种使用 Associations() 函数的变体,但我似乎无法让它工作。我似乎必须手动执行此操作:-
func (m *Model) GetDeployments() ([]Deployment, error) {
deployments := []Deployment{}
err := m.db.Find(&deployments).Error
if err != nil {
return nil, err
}
deploymentsWithServers := []Deployment{}
for _, d := range deployments {
servers := []Server{}
err := m.db.Model(&d).Association("Servers").Find(&servers).Error
if err != nil {
return nil, err
}
d.Servers = servers
deploymentsWithServers = append(deploymentsWithServers, d)
}
return deploymentsWithServers, nil
}
有没有人对我如何让 GORM 自动填充服务器字段有任何建议?谢谢!
尝试
m.db.Preload("Servers").Find(&Deployment{})