Sql Sequelize嵌套的即时加载查找嵌套关联不存在的所有位置';不匹配

Sql Sequelize嵌套的即时加载查找嵌套关联不存在的所有位置';不匹配,sql,sequelize.js,graphql,graphql-js,Sql,Sequelize.js,Graphql,Graphql Js,我正在尝试在我们的网站上设置一个自定义权限模块,而且我对sequelize和如何执行基本嵌套加载操作相对较新 我设置东西的方式是我有三个模型:Permission,PermissionDirectory,和User。权限位于列表中,嵌套在与目录的关系中。我在列表中有一个过滤器,它根据用户的权限是“允许”还是“拒绝”进行过滤。用户与权限之间存在多对多关系,我正在确定他们是否“允许”权限(如果他们之间存在关联) 问题页面是在筛选特定用户的权限时出现的。筛选用户是否“允许”权限非常简单: const

我正在尝试在我们的网站上设置一个自定义权限模块,而且我对sequelize和如何执行基本嵌套加载操作相对较新

我设置东西的方式是我有三个模型:
Permission
PermissionDirectory
,和
User
。权限位于列表中,嵌套在与目录的
关系中。我在列表中有一个过滤器,它根据用户的权限是“允许”还是“拒绝”进行过滤。用户与权限之间存在多对多关系,我正在确定他们是否“允许”权限(如果他们之间存在关联)

问题页面是在筛选特定用户的权限时出现的。筛选用户是否“允许”权限非常简单:

const directories=wait models.PermissionDirectory.findAll({
极限,
抵消,
其中:{[“$permissions.users.id$”],userId},
包括:[
{
模型:模型。权限,
包括:[{
模型:模型。用户
}]
},
]
});
返回目录;
但事实证明,通过“拒绝”进行过滤是困难的。执行相反的条件将返回其他用户拥有的权限,而不是返回目标用户(使用
userId
参数指定)没有的权限

其中:{[“$permissions.users.id$”],{[Op.ne]:userId}}

这不管用。举个例子,如果我正在查询获取所有权限,User1被“拒绝”。如果User1有Permission1,User2也有Permission1,Permission1的目录将获得拥有非User1用户的所有权限。因为User2与Permission1和
User1.id!=User2.id
,权限1将包含在响应中

但是,我可以通过首先查询具有userId的所有权限,列出它们的id,然后执行第二次查询来获得id不在该列表中的权限,从而获得所需的效果。。。但这需要两个电话,而不是一个


Tl;dr我正在寻找一种方法来进行嵌套的即时加载查询,在顶层有权限目录,只返回与给定用户没有关联的目录/权限。

在对互联网和许多死角进行了大量搜索之后,我想我知道了这个问题的不幸答案:sequelize不是擅长构建复杂查询

为了进一步澄清我的问题,本文的提纲将我的场景描述为一个例子

为了在sequelize中实现这个sql查询,我需要能够执行sequelize本机不支持的子查询(根据问题上缺少移动来衡量)


在where语句中使用
sequelize.literal
似乎可以满足我的需要,但如果sequelize从一开始就将所有连接类型合并到它们的功能中,而不是只支持内部连接和左连接,那就太好了。对我来说,这似乎是一种疏忽。

在按照本文介绍的一些方法更直接地构建查询方面取得了一些进展。看来sequelize在查询建筑方面可能有一些不足之处。你有没有想出其他的办法?我正在寻找一种方法,在
急切嵌套的
列上使用
where
条件。