蒸气4中的原始查询

问题描述 投票:2回答:1

在Vapor 3中,我能够获得与数据库的newConnection并使用此方法调用原始sql查询:

return request.withNewConnection(to: .mysql) { (con) -> EventLoopFuture<T> in  
    return con.raw(sql)...
}

现在我将代码迁移到Vapor 4时,函数raw或withNewConnection消失了,我可以用什么来进行原始查询。

复制步骤

return request.withNewConnection(to: .mysql) { (con) -> EventLoopFuture<T> in  
...
}

错误:无法根据成员'mysql'推断上下文基础类型'Request'的值没有成员'withNewConnection'

预期行为

request.db中有一个函数,让我获得新的连接或运行原始查询。

环境

  • 蒸气框架版本:4.7.1
  • 蒸气工具箱版本:vapor-beta
  • OS版本:macOS Catalina
vapor
1个回答
0
投票

尝试一下:

import SQLKit
struct Row:Content
{
    // fields go here
}
struct Context:Decodable
{
    let rows:[Row]
}
func rawDemo(_ request:Request) throws -> EventLoopFuture<View>
{
    return (request.db as! SQLDatabase).raw("SELECT * FROM MyTable").all(decoding:Row.self).flatMap
    {
        results in
        let context = Context(rows:results)
        return request.view.render("rawDemo", context)
    }
}

您必须导入SQLKit模块才能执行原始查询。完成此操作后,它将变得非常类似于Vapor 3方法。但是,借助Vapor 4中可用的新功能,我现在设法摆脱了所有原始查询,并替换为流畅的Fluent查询!

© www.soinside.com 2019 - 2024. All rights reserved.