如何使用QueryBuilder查询用户的朋友的帖子?

我想从数据库中查询所有用户朋友的帖子。我已经制定了以下代码,该代码似乎可以正常工作,但看起来效果并不理想,尤其是我过滤包含用户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)
    }

如何清除此代码?

iCMS 回答:如何使用QueryBuilder查询用户的朋友的帖子?

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

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)
    }

查询返回的是Posts数组,因此在对其进行排序和分页之前,需要将其展平。

本文链接:https://www.f2er.com/1593499.html

大家都在问