2017-10-06 3 views
1

Compte tenu de la structure de données suivante qui a été créé dans la base de données et il y a des données valides dans les lignes dans les tableaux appropriés: -Les associations GORM

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 
} 

Je suis en train de sélectionner tous les Déploiements et ont GORM automatiquement Remplissez les serveurs pour chaque déploiement.

Malheureusement, ce n'est pas le cas. J'ai essayé plusieurs variantes d'utilisation de la fonction Associations() mais je n'arrive pas à l'obtenir. Il me semble avoir à le faire manuellement: -

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 
} 

Quelqu'un at-il des suggestions comment je peux obtenir GORM pour remplir automatiquement le champ Serveurs? Merci!

Répondre

0

Essayez

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