2016-05-15 1 views
0

j'ai pu résoudre en partie ce avec this caseAffichage de clés étrangères des clés étrangères dans Gorm Go

Malheureusement, la fonction de préchargement() ne semble pas fonctionner avec fouillant plus bas dans l'ensemble d'objets connexes.

Pour clarifier, je les modèles suivants:

type Room struct { 
     gorm.Model 
     Name string 
     Games []Game `gorm:"ForeignKey:RoomID"` 
    } 

    type Game struct { 
     gorm.Model 
     RoomID int `gorm:"index"` 
     Players []Player `gorm:"ForeignKey:GameID"` 
    } 

    type Player struct { 
     gorm.Model 
     Name string 
     GameID int `gorm:"index"` 
    } 

Lorsque je crée un nouvel objet avec une nouvelle salle, jeux et objets joueur créé, je reçois les données suivantes sont revenus (codé JSON):

{"Value":{"ID":26,"CreatedAt":"2016-05-15T01:21:22.426234189-07:00","UpdatedAt":"2016-05-15T01:21:22.426234189-07:00","DeletedAt":null,"Name":"foo","Games":[{"ID":17,"CreatedAt":"2016-05-15T01:21:22.427026134-07:00","UpdatedAt":"2016-05-15T01:21:22.427026134-07:00","DeletedAt":null,"RoomID":26,"Turns":null,"Players":[{"ID":4,"CreatedAt":"2016-05-15T01:21:22.427560561-07:00","UpdatedAt":"2016-05-15T01:21:22.427560561-07:00","DeletedAt":null,"Name":"TestPlayer","GameID":17}],"Counter":1,"Assigned":false}],"Testing":false},"Error":null,"RowsAffected":1} 

Mais si je tente d'interroger la structure avec une fonction pré-charge(), je reçois le texte suivant:

{"Value":{"ID":26,"CreatedAt":"2016-05-15T01:21:22.426234189-07:00","UpdatedAt":"2016-05-15T01:21:22.426234189-07:00","DeletedAt":null,"Name":"foo","Games":[{"ID":17,"CreatedAt":"2016-05-15T01:21:22.427026134-07:00","UpdatedAt":"2016-05-15T01:21:22.427026134-07:00","DeletedAt":null,"RoomID":26,"Turns":null,"Players":null,"Counter":1,"Assigned":false}],"Testing":false},"Error":null,"RowsAffected":1} 

Notez que la section Players est maintenant nulle. Voici mon enregistrement chambre et fonctions requête de la chambre:

func RegisterRoom(w http.ResponseWriter, r *http.Request) { 
     err := r.ParseForm() 

     if err != nil { 
      // Handle error 
     } 
     // r.PostForm is a map of our POST form values 
     room := Room{ 
      Name: r.PostFormValue("label"), 
      Games: []Game{{ 
       Counter: 1, 
       Players: []Player{{Name: r.PostFormValue("username")}}, 
      }}, 
     } 
     t := db.Create(&room) 
     if err := json.NewEncoder(w).Encode(t); err != nil { 
      panic(err) 
     } 
    } 

func RoomShow(w http.ResponseWriter, r *http.Request) { 
    var rm Room 
    vars := mux.Vars(r) 
    roomId := vars["roomId"] 
    id, _ := strconv.Atoi(roomId) 
    room := db.Preload("Games").First(&rm, id) 
    result := db.Find(&room) 
    json.NewEncoder(w).Encode(result) 
} 
+0

Résolu! Réponse était sous [Nested Preloading] (http://jinzhu.me/gorm/curd.html#preloading-eager-loading) –

Répondre