2017-05-04 14 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

あなただけ含まれ、そこに巣あなたが必要とするすべてのモデル1を必要とする:

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

はい、しかし、CまたはDに関連付けられていないと、それらを介してのみをリンクすることができます: - > B - > C - > D – gurs1kh

+1

限り を手動で次のようにオブジェクトを再リンクすることができますインクルードはテーブル間の結合であり、モデル間の関連付けがない場合は、少なくとも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); 
} 
関連する問題