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

时间:2017-05-04 15:04:00

标签: mysql node.js orm sequelize.js

我希望能够在查询中嵌套我的包含,但我希望结果是非嵌套的。

例如:

public Class TestRel
{

   public string col1 {get;set;}

   public string col2 {get;set;}
}


var Realobj = new TestRel()

Realobj.col1 = "hi";
Realobj.col2 = "hello";

返回类似这样的内容:

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

但我想要这个:

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

如果不重构模型/表格,这可能吗?

2 个答案:

答案 0 :(得分:0)

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

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);
}

答案 1 :(得分:-2)

您只需要一个包含,然后嵌套您需要的所有模型:

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