具有新连接的Swift Vapor3 Raw SQL查询

时间:2018-07-29 03:35:11

标签: mysql sql swift fluent vapor

我正在尝试使用Vapor3执行 raw SQL查询。不幸的是,所提供的有关此类内容的文档在网站上非常模糊。

基本上我想做类似的事情:

router.get("example") { req -> Future<View> in
    let leaf = try request.make(LeafRenderer.self)

    // I can't get this next bit to work. Does anyone have any ideas how to do this? I seem to get all sorts of Xcode errors with .mysql, closures etc.
    let users = try request.withNewConnection(to: .mysql) { connection -> EventLoopFuture<[User]> 
       return try connection.raw("select * from users").all(decoding: User.self)
    }

    var context = [String: String]()
    context["user"] = users

    return leaf.render("example", context)
}

如果希望我在这里做错任何帮助,将不胜感激。

预先感谢, 马特

1 个答案:

答案 0 :(得分:1)

您的代码失败,因为您没有正确实现闭包。您的路线以let users...闭包形式返回,因此永远不会到达第二个return

这有效:

router.get("example")
{
    insecure.get("example") {
        request -> Future<View> in
        return request.withNewConnection(to: .mysql) {
            connection in
            return connection.raw("select * from User").all(decoding: User.self).flatMap(to:View.self) {
                users in
                return try request.make(LeafRenderer.self).render("example",["users":users])
            }
        }
    }
}

更改为:

  1. 在您需要之前无需定义leaf
  2. users的定义现在位于闭包之内。