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{})