0

このケースでこれを部​​分的に解決できました

残念ながら、Preload() 関数は、関連するオブジェクト セットをさらに深く掘り下げることでは機能しないようです。

明確にするために、次のモデルがあります。

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

新しい Room、Game、および Player オブジェクトを作成して新しいオブジェクトを作成すると、次のデータが返されます (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}

しかし、preload() 関数を使用して構造を照会しようとすると、次の結果が得られます。

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

Players セクションが null になっていることに注意してください。部屋の登録と部屋のクエリ機能は次のとおりです。

    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)
}
4

1 に答える 1

0

解決しました!答えはネストされたプリロードの下にありました

于 2016-05-15T08:53:28.603 に答える