【问题标题】:Complex query using Fluent in Vapor 4在 Vapor 4 中使用 Fluent 进行复杂查询
【发布时间】: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)

我怎样才能以正确的方式做这样的过滤器?

【问题讨论】:

    标签: vapor vapor-fluent


    【解决方案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
          }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 2019-04-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多