2017-07-05 2 views
0

Ich bin meine Datenbank unter Verwendung gorm.Abrufen von Viele-zu-viele-Ergebnisse von GORM

Ich habe zwei Tabellen (service und resource) mit einer Viele-zu-viele-Beziehung. Ich modelliert sie in Code als solche:

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 die Verwendung AutoMigrate die folgenden Tabellen erstellt:

Database diagram m2m

(I ausgeführt auch eine rohe SQL-Abfrage der ID Primärschlüssel in der hinzufügen . Zuordnungstabelle)

Um einen neuen Dienst zu erstellen, verwende ich den folgenden Code:

service := Service{ 
    Name: "core", 
    Resources: []Resource{ 
     {Name: "ec2"}, 
     {Name: "dynamo"}, 
    }, 
} 
db.Create(&service) 

Dies erstellt alle Ressourcen zusammen mit dem Dienst und füllt die Beziehung zwischen ihnen in der service_resource Tabelle sehr gut, wie erwartet.

Mein Problem ist jedoch, wenn ich für die Dienste abfrage. Ich verwende den folgenden Code alle Dienste abzurufen:

services := []model.Service{} 
db.Find(&services) 

Dies gibt erfolgreich mit dem Dienste Array gefüllt, aber die Resources Array jedes Dienstes ist leer:

"services": [ 
    { 
     "ID": 1, 
     "Name": "core", 
     "Resources": null 
    }, 
    ... 
] 

ich unter der Annahme war, dass Gorm würde es automatisch füllen. Gibt es einen Schritt, den ich vermisse?

Antwort

0

Sie müssen die Ressourcen Feld Preload vor für Dienste abfragen:

services := []model.Service{} 
db.Preload("Resources").Find(&services) // error checking ommited 

Dieses auffüllt richtig Resources Feld jeden Dienst.