2016-06-06 81 views
0

在sequelize文檔中有一個例子,如下所示(我有一個類似的用例)。現在續集n:m加入表1:m渴望加載關係

ItemTag = sequelize.define('item_tag', { 
    tag_id: { 
    type: DataTypes.INTEGER, 
    unique: 'item_tag_taggable' 
    }, 
    taggable: { 
    type: DataTypes.STRING, 
    unique: 'item_tag_taggable' 
    }, 
    taggable_id: { 
    type: DataTypes.INTEGER, 
    unique: 'item_tag_taggable', 
    references: null 
    } 
}); 
Tag = sequelize.define('tag', { 
    name: DataTypes.STRING 
}); 

Post.belongsToMany(Tag, { 
    through: { 
    model: ItemTag, 
    unique: false, 
    scope: { 
     taggable: 'post' 
    } 
    }, 
    foreignKey: 'taggable_id', 
    constraints: false 
}); 
Tag.belongsToMany(Post, { 
    through: { 
    model: ItemTag, 
    unique: false 
    }, 
    foreignKey: 'tag_id' 
}); 

,可以說我必須包括一個附加的關係表:

ItemTagReaction = sequelize.define('item_tag_reaction', { 
    reaction_type: { 
    type: Sequelize.ENUM.apply(Sequelize, reactionTypes), 
    }, 
    tagResponse: Sequelize.STRING(256), 
}); 

現在,包括我在這裏的附加關係:

ItemTag.hasMany(ItemTagReaction); 

我怎樣才能eagerload的ItemTagReaction在查詢Post時?

Post.findById(2, { 
    include: [Tag], 
}) 

^^上面的工作,但我不知道如何確保ItemTagReaction也加載。如果包含它,則會出現與Post無關的錯誤。如果您嘗試嵌套將它包含到標記中,則會發生錯誤,它們也不相關。

幫助!?

回答

0

在您的定義中,Post與標籤有關。但Post和Tag都不與ItemTagReaction和ItemTag關聯。

您必須將ItemTagReaction關聯到Post或Tag。然後你可以包含它(Post)或嵌套它(Tag)。