2016-05-15 47 views
0

我能夠與this case顯示外鍵的外鍵在G​​o格姆

部分地解決了這個不幸的是,預載()函數似乎並不與在深入研究相關的對象集進一步回落工作。

爲了澄清,我有以下型號:

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"` 
    } 

當我創建一個新的房間一個新的對象,遊戲,和玩家創建的對象,我得到以下數據返回(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} 

但是,如果我試圖用預緊()函數來查詢的結構,我得到如下:

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

請注意,玩家部分現在爲空。這裏是我的房間註冊和房間查詢功能:

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

解決了它!答案是[嵌套預加載](http://jinzhu.me/gorm/curd.html#preloading-eager-loading) –

回答