2016-08-02 13 views
2

多対多関係の属性のモデルをthrough経由で含めることは可能ですか?Sequelize:through.attributeのモデルを含む

のは、私は次のモデルを抱えているとしましょう:

User = sequelize.define('user', {/* attributes */}); 
Question = sequelize.define('question', {/* attributes */}); 
Answer = sequelize.define('answer', {/* attributes */}); 

/* Where */ 
Question.hasMany(Answer); 
Answer.belongsTo(Question); 

私は彼が質問に答えるたユーザーごとに保存したいと思います。だから私は、次の関係を追加しました:

UserQuestionAnswerRel = sequelize.define('usersAnwers', { 
    user: {/**/}, 
    question: {/**/}, 
    answer: {/**/} 
}); 

User.hasMany(Question, { through: UserQuestionAnswerRel }); 

今、私は彼がに答えすべての質問と彼はを与えた答えを受信するユーザを照会したいと思います。しかし、それはどのように機能しますか?残念ながら、これは動作しません:

User.findAll({ 
    include: { 
    model: Question, 
    through: { include: model.Answer } 
    } 
}).then /* */ 

ご注意:をすべてこのQ &ものは一例に過ぎません。私はthroughの関係を使用することはできません。

+0

興味深いものです。申し訳ありませんが私はまだ答えがありません。私の質問に似ているのだろうかと思う。 http://stackoverflow.com/questions/38714624/with-sequelize-pre-filter-a-results-set-based-on-custom-attribute私は本質的に 'スルー'モデルにアクセスし、残りのレコードをフィルタリングしたい'inner' join – JAG

+0

なぜ 'through'を使わなければならないのか説明できますか?これは、[ネストされたeager loading](http://sequelize.readthedocs.io/en/latest/docs/models-usage/index.html#nested-eager-loading)を使用して行うのがかなり簡単です。 – Will

答えて

3
私は彼が答えたすべての質問を受けたユーザーとあなたが Nested eager loadingを使用する必要があり、彼は

を与えた答えを照会したいと思い

。たとえば、クエリは次のようになります。

User.findAll({ 
    include: { 
    model: UserQuestionAnswerRel, 
    include: [ 
     { model: Question }, 
     { model: Answer } 
    ] 
    } 
}).then... 
関連する問題