Mysql Sequelize-嵌套的';包括';语句不会在节点中正确返回结果

Mysql Sequelize-嵌套的';包括';语句不会在节点中正确返回结果,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我有5个db表: 模板,能力,部署,级别,要求 Template (PK) -> has many Capability (FK) Capability (PK) -> has many Deployments (FK) && Capability has many Levels (FK) Level (PK) -> has many Requirement (FK) 我想检索所有模板,以及相关的外键,一直到需求。 但是,我想将级别数限制为未删除的级别(i

我有5个db表:

模板
能力
部署
级别
要求

Template (PK) -> has many Capability (FK)

Capability (PK) -> has many Deployments (FK) && Capability has many Levels (FK)

Level (PK) -> has many Requirement (FK)
我想检索所有模板,以及相关的外键,一直到需求。 但是,我想将级别数限制为未删除的级别(
isDeleted:false

如果有检索到的数据,这是可行的,但是如果没有从基于Where(isDeleted)的Levels表返回任何记录,Sequelize也将为Deployments表返回一个空数组。如果从Levels表中找到记录,则此查询将更正数据。但是,部署表中的记录不应该返回,因为它是一个不同的表吗

Template.hasMany(Capability, { foreignKey : {name : 'templateId'} })
Capability.hasMany(Deployment, { foreignKey : {name : 'capabilityId'} });
Capability.hasMany(Level,  {foreignKey : {name : 'capabilityId'} });
Level.hasMany(Requirement,  {foreignKey : {name : 'levelId'}});

const allModules = 
    await Template.findAll({            
        include : [ {
            model: Capability, 
            as: 'capabilities',
            include : [ 
                {
                model: Deployment,
                as : 'deployments'
            },{
                model: Level,
                as : 'levels', 
                where : { isDeleted : false }, // this is the failing part ( if no records are returned both the Deployment recordset and the Level recordset fail)
                include : [{
                    model : Requirement,
                    as : 'requirements',
                }],
            },]
        }],
    })
你可能在要求一些不可能的事情。你说:

Capability.hasMany(Level, ...
Level.hasMany(Requirement ....
如果没有级别(或者,如果级别标记为已删除),则能力和需求之间的链接将断开,因此无法检索这些需求。他们将以什么样的能力出现

OTOH,如果您正在查找其他外部联接情况,请尝试
required:false
。例如,您可以将其添加到查询中,以检索没有部署的功能,如下所示:

   ...    
   include : [ {
            model: Capability, 
            as: 'capabilities',
            include : [ 
                {
                model: Deployment,
                as : 'deployments',
                required : false            // outer join
            }
    ...
你可能在要求一些不可能的事情。你说:

Capability.hasMany(Level, ...
Level.hasMany(Requirement ....
如果没有级别(或者,如果级别标记为已删除),则能力和需求之间的链接将断开,因此无法检索这些需求。他们将以什么样的能力出现

OTOH,如果您正在查找其他外部联接情况,请尝试
required:false
。例如,您可以将其添加到查询中,以检索没有部署的功能,如下所示:

   ...    
   include : [ {
            model: Capability, 
            as: 'capabilities',
            include : [ 
                {
                model: Deployment,
                as : 'deployments',
                required : false            // outer join
            }
    ...