1

我有一个 Vapor 3 应用程序,我需要确定 2 个用户是否共享任何公共组。

所以我有 2 个模型用户和组。一个用户可以属于许多组。但是我有一个权限检查,如果两个用户共享一个公共组,他们可以互相发送消息。

final public class User: PostgreSQLModel {
    public var id: Int?
    var firstName: String
    var lastName: String
}

extension User {
    var containers: Siblings<User, Group, UserGroups> {
        return siblings()
    }
}

final public class Group: PostgreSQLModel {
    public var id: Int?
    var name: String
}

我想做的是这个

UserGroups.query(to: request).group(.or) { $0.filter(\.userId == user.id!).filter(\.userId == user.id!) }.flatMap { ... }

加上一个过滤器,说明 groupId == groupId。

有什么想法或建议吗?

4

1 回答 1

0

我认为您不能在单个查询中完成此操作,但您可以尝试以下操作:

UserGroups.query(on:request).filter(\.userId == user1.id!).all().flatMap
{
    groups in
    groups.map { $0.id! }.flatMap
    {
        groupIds in
        UserGroups.query(on:request).filter(\.userId == user2.id!).filter(\.groupId ~~ groupIds).all().flatMap
        {
            // do your work here
        }
    }
}
于 2020-03-08T17:27:22.743 回答