Mysql 将多个接头与蒸汽过滤器组合

Mysql 将多个接头与蒸汽过滤器组合,mysql,swift,join,vapor,Mysql,Swift,Join,Vapor,在我的后端,我有Posts和PostController。帖子可以是友好可见的 在GET/posts中,我想返回当前用户可以看到的所有帖子。 User模型有一个friends属性,它是User、User的轴心,包含userID和friendsid列 我目前收到的帖子如下: /// /posts func all(req: Request) throws -> Future<[Post]> { let authenticated = try req.requireAuth

在我的后端,我有
Post
s和
PostController
。帖子可以是
友好可见的

GET/posts
中,我想返回当前用户可以看到的所有帖子。
User
模型有一个
friends
属性,它是
User、User
的轴心,包含
userID
friendsid

我目前收到的帖子如下:

/// /posts
func all(req: Request) throws -> Future<[Post]> {
    let authenticated = try req.requireAuthenticated(User.self)
    return Post.query(on: req)
        .filter(\Post.visibleForUserType == authenticated.type)
        // FIXME: respect .visibleForFriendsOnly
        .all()
}
///posts
func all(请求:请求)抛出->未来{
let authenticated=try req.requireAuthenticated(User.self)
返回Post.query(on:req)
.filter(\Post.visibleForUserType==authenticated.type)
//FIXME:尊重。只对朋友可见
.all()
}
我很难做到这一点,因为对于每一篇
帖子
,我必须先获得
用户ID
,然后是
用户
(作者),然后查询用户的
朋友
,看看当前用户是否在该列表中。

有没有可行的方法?可能是连接或其他什么?

看起来您可以像这样构建自定义原始查询

返回req.requestPooledConnection(到:.mysql).flatMap{conn in
延迟{try?req.releasePooledConnection(conn,to:.mysql)}
返回原始连接(“”)
从帖子中选择帖子。*
左外加入用户\好友
打开(user_friends.userID=posts.userID和user_friends.friendsid=3)
或者(user_friends.friendID=posts.userID和user_friends.userID=3)
按posts.id分组
拥有COUNT(user_friends.id)=2或posts.userID=3或visibleForFriendsOnly=0
“”)。全部(解码:Post.self)
}

我建议尝试使用原始查询在一个请求中查询所需的数据,然后您就会了解使用Fluent是否可行,或者您是否需要更多的内容您可以显示一些代码吗?我对Vapor比较陌生&整个后端/数据库的东西,尤其是连接@你会发现我和我一样不和谐