Возврат JSON, содержащего массив в Vapor - PullRequest
0 голосов
/ 24 января 2019

Допустим, я настроил Vapor с базой данных. У меня есть две таблицы с отношениями родитель-ребенок. В качестве примера давайте используем Team в качестве родительской таблицы и Player в качестве дочерней.

С Fluent легко вернуть json всем игрокам команды. Также легко вернуть JSON с командой игрока. Но какой самый простой способ вернуть json со свойствами команды и массивом игроков?

И наоборот. Учитывая json со свойствами команды и массивом игроков, какой самый простой способ создать команды и игроков из этого json?

Может ли Fluent помочь с этим или мы сами справимся?

Большое спасибо!

Carlos

1 Ответ

0 голосов
/ 24 января 2019

Обычно вы создаете специальную структуру, которая соответствует Content, чтобы получить данные JSON и вернуть данные JSON. Для вашего примера это будет выглядеть примерно так:

struct TeamPlayerContent: Content {
    let team: Team
    let players: [Player]
}

Затем, когда вы получите запрос, вы можете декодировать тело и получить экземпляр структуры:

router.post(TeamPlayerContent.self, at: "teams") { request, body in
    // Save the team and player models
}

И когда вы получаете данные Team и Player из базы данных, вы можете создать экземпляр структуры и вернуть его по маршруту:

router.get("teams", Team.parameter) ( request in
    return try request.paramaters.next(Team.self).flatMap { team in
        let players = try Player.query(on: request).filter(\.teamID == team.requireID()).all()
        return players.and(team)
    }.map { data in 
        return TeamPlayerContent(team: data.1, players: data.0)
    }
}
...