这样的办法应该行得通
router.post([Page].self, at: "/releases") { (req, pages) -> Future<[Page]> in
var result: [Page] = []
return pages.map { p in
var page = p
var pageEvents: [Event] = []
return page.events.map { e in
var event = e
return Release.query(on: req).filter(\.fbId == event.id).first().map { release in
if let release = release {
event.started = release.started
}
pageEvents.append(event)
}
}.flatten(on: req).map {
page.events = pageEvents
result.append(page)
}
}.flatten(on: req).transform(to: result)
}
import FluentSQL // for `~~` operator
router.post([Page].self, at: "/releases") { (req, pages) -> Future<[Page]> in
let eventIds = pages.map { $0.events }.flatMap { $0 }.map { $0.id }
return Release.query(on: req).filter(\.fbId ~~ eventIds).all().map { releases in
var result: [Page] = []
for p in pages {
var page = p
var pageEvents: [Event] = []
for e in p.events {
var event = e
if let release = releases.first(where: { $0.fbId == e.id }) {
event.started = release.started
}
pageEvents.append(event)
}
page.events = pageEvents
result.append(page)
}
return result
}
}