Mysql 在sequelize.js中,是否可以使用嵌套的包含取消嵌套查询结果?
我希望能够在查询中嵌套我的include,但我希望结果不嵌套 例如: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 } ]} ]} ] }) ... 返回如下内容: [ {
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中