swift - Vapor 4 不区分大小写的查询
问题描述
在 Vapor 3 中,您可以使用filter
带有 SQLiteBinaryOperator 的方法,因此您可以使用 like 运算符创建查询。我试图在 Vapor 4 中做同样的事情,但找不到任何东西。这是我的代码
蒸气 4
func queryUserMovies(_ req: Request) throws -> Future<[Users]> {
let title = req.parameters.get("title")!
return Movies.query(on: req.db).filter(\.$title == title).first().unwrap(or:Abort(.notFound, reason: "There's no movie")).flatMap{ movie in
return movie.$users.query(on: req.db).all()
}
}
蒸气 3
func queryUserMovies(_ req: Request) throws -> Future<[Users]> {
guard let movie = req.query[String.self, at: "movie"] else {
throw Abort(.badRequest, reason: "Not such movie")
}
return Movies.query(on: req).filter(\.title, .like, movie).first().unwrap(or:Abort(.notFound, reason: "There's no movie")).flatMap{ movie in
return movie.users.query(on: req).all()
}
}
Vapor 4 中是否有类似的东西,还是我需要在 SQL 中执行原始查询?
解决方案
Vapor 4 中的等价物是:
func queryUserMovies(_ req: Request) throws -> Future<[Users]> {
let title = try req.query.get(String.self, at: "title")
return Movies.query(on: req.db)
.filter(\.$title, .custom("ilike"), title)
.first()
.unwrap(or:Abort(.notFound, reason: "There's no movie"))
.flatMap{ movie in
return movie.$users.query(on: req.db).all()
}
}
您甚至可以执行更广泛的搜索来查找包含该标题的任何内容:
.filter(\.$title, .custom("ilike"), "%\(title)%")
推荐阅读
- liferay - MVCActionCommand 与 MVCResourceCommand
- c++ - 为什么即使我在项目设置中更改了语言标准,std::lcm() 也不起作用?
- amazon-web-services - 无法在 s3 存储桶上提交 pyspark 文件
- maven - 当我尝试从另一个包访问我的控制器类时,RESTEasy JAX-RS Nullpointer
- java - org.apache.commons.math3.stat.regression.SimpleRegression X 和 Y 轴
- java - 如何从自动生成的 JPA 实体中分离计算值?
- google-cloud-platform - 反向代理 Google Cloud Storage 公共 URL 失败/404s
- google-chrome - 如果 Google 将整个活动标签 DOM 发送到我的后端,Google 会禁止我的扩展程序吗?
- spring-boot - 在 Apache Archiva 中使用 Gradle6.3 和 Spring boot 2.2..6.Release 的 RSocket 依赖问题
- java - 如何在模拟 HTTPResponse 中添加标头