返回包含 Vapor 数组的 JSON
Returning a JSON containing an array in Vapor
假设我为 Vapor 配置了一个数据库。我有两个 table 有亲子关系。例如,让我们使用 Team 作为父项 table,将 Player 作为子项。
使用 Fluent 可以很容易地 return json 与团队的所有球员进行交流。也很容易return一个json跟一个玩家的队伍。但是,return json 具有团队属性和一组玩家的最简单方法是什么?
恰恰相反。给定 json 以及球队属性和一组球员,这是从 json?
创建球队和球员的最简单方法
Fluent 可以帮助解决这个问题还是我们应该自己管理它?
非常感谢!
卡洛斯
通常您会创建一个符合 Content
的特殊结构,以获取 JSON 数据和 return 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
数据时,您可以创建一个结构实例并 return 它来自路由:
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)
}
}
假设我为 Vapor 配置了一个数据库。我有两个 table 有亲子关系。例如,让我们使用 Team 作为父项 table,将 Player 作为子项。
使用 Fluent 可以很容易地 return json 与团队的所有球员进行交流。也很容易return一个json跟一个玩家的队伍。但是,return json 具有团队属性和一组玩家的最简单方法是什么?
恰恰相反。给定 json 以及球队属性和一组球员,这是从 json?
创建球队和球员的最简单方法Fluent 可以帮助解决这个问题还是我们应该自己管理它?
非常感谢!
卡洛斯
通常您会创建一个符合 Content
的特殊结构,以获取 JSON 数据和 return 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
数据时,您可以创建一个结构实例并 return 它来自路由:
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)
}
}