在 Vapor 4 中使用 Fluent 进行复杂查询
Posted
技术标签:
【中文标题】在 Vapor 4 中使用 Fluent 进行复杂查询【英文标题】:Complex query using Fluent in Vapor 4 【发布时间】:2020-06-04 05:59:59 【问题描述】:我想查询在兄弟姐妹字段中包含特定用户的聊天。
简化模型:
final class Chat: Model, Content
@Siblings(through: ChatUser.self, from: \.$chat, to: \.$user)
var users: [User]
final class User: Model, Content
@Siblings(through: ChatUser.self, from: \.$user, to: \.$chat)
var chats: [Chat]
我的获取路线:
func fetch(req: Request) throws -> EventLoopFuture<[Chat]>
let user = try req.auth.require(User.self)
return Chat
.query(on: req.db)
.filter("users", .contains(inverse: false, .anywhere), user)
.all()
我收到[ ERROR ] server: column chats.users does not exist (errorMissingColumn)
我怎样才能以正确的方式做这样的过滤器?
【问题讨论】:
【参考方案1】:如果我正确理解了您的要求,您应该从User
结尾的兄弟关系开始,而不是Chat
。然后,您的查询将简化为:
func fetch(req: Request) throws -> EventLoopFuture<[Chat]>
let user = try req.auth.require(User.self)
return User
.query(on: req.db)
.filter(\.$id == user.id!)
.with(\.$chats)
.first()
.unwrap(or:Abort(.internalServerError))
.map
chattyUser in
return chattyUser.chats
【讨论】:
以上是关于在 Vapor 4 中使用 Fluent 进行复杂查询的主要内容,如果未能解决你的问题,请参考以下文章