vapor - Vapor 4 中的原始查询
问题描述
在 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”推断上下文基础“请求”类型的值没有成员“withNewConnection”
预期行为
在 request.db 中有一个函数,可以让我获得新连接或运行原始查询。
环境
- Vapor 框架版本:4.7.1
- Vapor Toolbox 版本:vapor-beta
- 操作系统版本:macOS Catalina
解决方案
尝试这个:
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
模块并request.db
转换SQLDatabase
为才能执行原始查询。一旦你这样做了,它就变得很像 Vapor 3 方法。然而,有了 Vapor 4 中可用的新功能,我现在设法摆脱了所有原始查询并用流畅的 Fluent 查询替换!
推荐阅读
- mongodb - 如何在 Mongodb 中找到没有 _id 的单个值?
- sql - 如何使用触发器根据日期更改列值?
- facebook - 如何使用 Facebook 的开放图形标签“product.group”?
- python - IDLE 识别的错误 python 安装/或 IDLE 不识别 Anaconda
- sql - 转换为实体框架 Lambda
- php - 创建事务控制器导致意外错误
- python - 如何获取熊猫数据框中不唯一且按行的项目数?
- javascript - 在鼠标悬停时停止 setTimeout 引导模式
- databricks - 如何使用 Databricks dbutils 从文件夹中删除所有文件
- sql - 如何使用 SQL 索引元素?