在sequelize文档中有一个例子如下(我有一个类似的用例)。
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);
在查询Post时如何eagerload ItemTagReaction?
Post.findById(2, {
include: [Tag],
})
上面的^^有效,但我不知道如何确保还加载了ItemTagReaction。如果包含它,则会收到与Post无关的错误。如果你尝试将它包含在Tag中,你就会得到一个错误,它们也没有关系。
帮助!?
答案 0 :(得分:0)
在您的定义中,Post与Tag相关。但Post和Tag都没有与ItemTagReaction和ItemTag相关联。
您必须将ItemTagReaction与帖子或标签相关联。然后你可以包括它(Post)或嵌套包含它(Tag)。