Как выполнить запрос с FluentMySQL для отображения результатов с Leaf - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь запросить некоторые данные из 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 Ответ

0 голосов
/ 02 января 2019

Сложно дать вам ответ, используя код в вашем вопросе, но, надеюсь, это даст вам достаточно указателей, чтобы начать работу.

Создайте структуру для хранения информации, которую вы хотите отправить в представление.от результатов вашего запроса до 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)
    }
}
...