Как выполнить запрос с FluentMySQL для отображения результатов с Leaf
Я пытаюсь запросить некоторые данные из MySQL для отображения таблицы с листа.
Из-за Futures я не знаю, как объединить FluentMySQL и Leaf.
import Vapor
final class IndexController {
func index(_ req: Request) throws -> EventLoopFuture<View>{
let futureEvents = try Event.query(on: req).all()
// Here I want to add the querys results to 'renderParameters'
var renderParameters = ...
return try req.view().render("index", renderParameters)
}
}
1 ответ
Трудно дать вам ответ, используя код в вашем вопросе, но, надеюсь, это даст вам достаточно указателей, чтобы вы могли продолжить работу.
Создайте структуру для хранения информации, которую вы хотите отправить в представление из результатов запроса в View
, Убедитесь, что это Encodable
, У меня нет простого примера использования Future
, но что-то вроде следующего может легко включать [Future<Location>]
struct AllLocationsContext: Encodable {
let title: String
let hideInactiveLocations: Bool
let locations: [Location]
}
Затем добавьте flatMap
к вашему запросу и встраивать как создание вашей структуры параметров, так и return
это создает View
,
locations.get("/")
{
request -> Future<View> in
let title = "Events (Active and Inactive)"
return Location.query(on:request).sort(\.name).all().flatMap(to: View.self) {
locations in
let context = AllLocationsContext(title: title, hideInactiveLocations: hideInactiveLocations, locations: locations)
return try request.view().render("locations",context)
}
}