在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中有一个函数,让我获得新的连接或运行原始查询。
尝试一下:
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查询!