下一个关于蒸汽的函数是:

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

下一个struct 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。
我该怎么做?
谢谢!

最佳答案

我不确定在PartidoSede之间存在什么类型的关系,因为模型不包含在这里,但是假设它是父/子关系,那么你应该能够做一些类似的事情:

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获得适当的结果。

10-07 19:55
查看更多