Mysql 在sequelize.js中,是否可以使用嵌套的包含取消嵌套查询结果?

Mysql 在sequelize.js中,是否可以使用嵌套的包含取消嵌套查询结果?,mysql,node.js,orm,sequelize.js,Mysql,Node.js,Orm,Sequelize.js,我希望能够在查询中嵌套我的include,但我希望结果不嵌套 例如: db.a.findAll({ where: {id: id}, include: [ { model: db.b, include: [ { model: db.c, include: [ { model: db.d } ]} ]} ] }) ... 返回如下内容: [ {

我希望能够在查询中嵌套我的include,但我希望结果不嵌套

例如:

db.a.findAll({
    where: {id: id},
    include: [
        { model: db.b, include: [
            { model: db.c, include: [
                { model: db.d }
            ]}
        ]}
    ]
})
...
返回如下内容:

[
    {
        a: {
            ...
            b: {
                ...
                c: {
                    ...
                    d: {
                        ...
                    }
                }
            }
        }
    }
]
db.a.findAll({
    where: {id: id},
    include: [
        { model: db.b, include: [
            { model: db.c, include: [
                { model: db.d }
            ]}
        ]}
    ]
}).then(function(a) {
    //you may need to iterate over an array
    a.setDataValue('d', a.b.c.d);
    a.b.c.setDataValue('d', null);
    a.setDataValue('c', a.b.c);
    a.b.setDataValue('c', null);
}
但我想要这个:

[
    {
        a: {
            ...
            b: {
                ...
            },
            c: {
            ...
            },
            d: {
                ...
            }
        }
    }
]

在不重构模型/表的情况下,这是可能的吗?

您只需要一个include,然后在那里嵌套您需要的所有模型:

db.a.findAll({
    where: {id: id},
    include: [
        { 
            model: db.b
        },{
            model: db.c
        },{
            model: db.d
        }
    ]
})

我发现了如何做到这一点,但这不是最理想的方法。您可以手动重新链接对象,如下所示:

[
    {
        a: {
            ...
            b: {
                ...
                c: {
                    ...
                    d: {
                        ...
                    }
                }
            }
        }
    }
]
db.a.findAll({
    where: {id: id},
    include: [
        { model: db.b, include: [
            { model: db.c, include: [
                { model: db.d }
            ]}
        ]}
    ]
}).then(function(a) {
    //you may need to iterate over an array
    a.setDataValue('d', a.b.c.d);
    a.b.c.setDataValue('d', null);
    a.setDataValue('c', a.b.c);
    a.b.setDataValue('c', null);
}

是的,但a与c或d没有关联,只能通过它们进行链接,如:a->b->c->dAs。据我所知,这是不可能的,因为包含是表之间的连接,如果模型之间没有关联,那么唯一的选项就像您首先在sequelize.js中做的一样,至少不是在sequelize.js中