【问题标题】:How do I query a user's friends' posts using QueryBuilder?如何使用 QueryBuilder 查询用户朋友的帖子?
【发布时间】:2020-12-28 18:12:55
【问题描述】:

我想从数据库中查询所有用户朋友的帖子。我已经编写了以下代码,它似乎可以工作但看起来不太好,尤其是我过滤具有用户 ID 的帖子的部分。

user.$friends
    .query(on: request.db)
    .all()
    .flatMap { (friends: Array<User>) -> EventLoopFuture<Page<Post>> in
        return Post
            .query(on: request.db)
            .filter(\.$user.$id ~~ friends.reduce(into: [], { (ids: inout Set<UUID>, user: User) in
                if let id: UUID = user.id {
                    ids.insert(id)
                }
            }))
            .sort(\.$createdAt)
            .paginate(for: request)
    }

如何清理这段代码?

【问题讨论】:

    标签: swift database vapor vapor-fluent


    【解决方案1】:

    我没有机会对此进行测试,但它看起来是正确的:

    return user.$friends
        .query(on: request.db)
        .all()
        .flatMap { (friends: Array<User>) -> EventLoopFuture<Page<Post>> in
            return friends.map { friend in
                return Post
                    .query(on: request.db)
                    .filter(\.$user.$id == friend).all()
            }.flatten(on: request.eventLoop)
            .sort(\.$createdAt)
            .paginate(for: request)
        }
    

    查询返回一个帖子数组的数组,因此在排序和分页之前需要展平。

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2016-02-01
      相关资源
      最近更新 更多