如何解决如何在graphQl/Sequelize 中对嵌套查询应用where 子句?
const typeDefs = gql`
…
type Menu{
id:Int
label: String
children: [Menu]
icon: String
table: String
}
…
此模型解析如下:
const resolvers = {
…
Query: {
nodes: async (_,args,context) =>{
try{
…
const menu=await Menu.findAll({ where: args});
return menu;
} catch(error){
console.error("ERROR");
return {};
}
},…
Menu: {
children: async(menu) => {
const getM=await menu.getMenus();
return getM;
},},…
它按要求工作,直到我需要对菜单访问应用一些限制。 让我们考虑一下我想限制对 Menu id #5 的访问。以下内容适用于第一级,但不适用于儿童。
const menu=await Menu.findAll({ where: {...args,[Op.not]:{id:5}}});
我知道 getMenus() 是由 Sequelize 直接执行的,没有调用解析器,但是如何为孩子应用“where 子句”或如何让 getMenus() 考虑“where 子句”的约束?
解决方法
您需要使用 include 来包含子项(菜单)并添加 where 子句。像这样:
const result: ParentEntity = await ParentEntity.schema(tenant).findAll<ParentEntity>({
include: [{
model: ChildEntity.schema(tenant),where: yourConditionOnTheChildEntity
}]
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。