Vapor Swift - 从两个模型中获取数据
Posted
技术标签:
【中文标题】Vapor Swift - 从两个模型中获取数据【英文标题】:Vapor Swift - Obtaining data from two Models 【发布时间】:2018-12-10 23:07:54 【问题描述】:我在 Vapor 上有下一个功能:
func getPartidosHandler(_ req: Request) throws -> Future<[PartidoWSData]>
return Partido.query(on: req).filter(\.estado == nil).all().map(to: [PartidoWSData].self) partidos in
var partidosWS: [PartidoWSData] = []
for partido in partidos
// Something here
return partidosWS
还有下一个结构体 PartidoWSData:
struct PartidoWSData: Content
let idPartido: String
let fecha: String
let sede1: Future<Sede>
let sede2: Future<Sede>
我的模型 Partido 有两个对 Sede 的引用,“sede1”和“sede2”。
我想要的是该函数给出了一个PartidoWSData结构的数组,其中我可以看到“Partido”,“idPartido”和“fecha”两个属性,以及与模型相关的两个Sede。
我该怎么做?
谢谢!
【问题讨论】:
【参考方案1】:我不确定Partido
和Sede
之间究竟存在什么类型的关系,因为这里没有包含模型,但假设它是父/子关系,您应该能够执行以下操作:
func getPartidosHandler(_ req: Request) throws -> Future<[PartidoWSData]>
return Partido.query(on: req).filter(\.estado == nil).all().flatMap partidos -> Future<[PartidoWSData]> in
let partidoIDs = try partidos.map try $0.requireID()
return Sede.query(on: req).filter(\.partidoID ~~ partidoIDs).map sedes -> [PartidoWSData] in
return partidos.map partido -> PartidoWSData in
return PartidoWSData(
id: partido.id
sedes: sedes.filter $0.partidoID == partido.id
)
关键是使用~~
运算符做一个x IN (...)
谓词,然后使用Array.filter
得到适当的结果。
【讨论】:
以上是关于Vapor Swift - 从两个模型中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 Psql 通过 Swift (Vapor) 到通过 Ajax 的 JQuery 的日期落后了 31 年?
Swift Vapor 服务器:如何在获取请求中返回嵌套字典?
从 Vapor 3 到 Vapor 4 的 LingoVapor 包