【问题标题】:GORM AssociationsGORM 协会
【发布时间】:2017-10-23 04:36:11
【问题描述】:

鉴于已在数据库中创建了以下数据结构,并且相应表中的行中存在有效数据:-

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
}

我正在尝试选择所有部署并让 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 自动填写服务器字段有任何建议吗?谢谢!

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    试试

    m.db.Preload("Servers").Find(&Deployment{})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多