2017-05-04 131 views
0

我希望能夠在查詢中嵌套我的包含,但我希望結果是非嵌套的。在sequelize.js中,是否可以使用嵌套包含嵌套查詢的結果?

例如:

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

回報是這樣的:

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

,但我想這一點:

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

這是可能的,而不重構模型/表?

回答

-1

你只需要一個包含有您需要嵌套的所有車型:

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

是的,但不與c或d相關聯,並且只能通過其鏈接,如: 一個 - 「乙 - 」ç - > d – gurs1kh

+1

據因爲我知道這是不可能的,因爲include是表和表之間的連接。如果模型之間沒有關聯,那麼唯一的選擇就像你先做的那樣,至少不是在sequelize.js中 – Ellebkey

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