2016-06-06 17 views
0

Es gibt ein Beispiel in der Sequelize-Dokumentation wie folgt (Ich habe einen ähnlichen Anwendungsfall).Sequelize n: m Join Tabelle 1: m Eager laden Beziehung

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

sie nun an, ich eine weitere Beziehung und Tabelle enthalten habe:

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

Nun, ich eine zusätzliche Beziehung hier:

ItemTag.hasMany(ItemTagReaction); 

Wie kann ich die ItemTagReaction eagerload kann bei der Abfrage nach Post?

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

Die ^^ oben funktioniert, aber ich weiß nicht, wie Sie sicherstellen, ItemTagReaction wird auch geladen. Wenn Sie es einschließen, erhalten Sie einen Fehler, der nicht mit Post verbunden ist. Wenn Sie versuchen und verschachteln, es in Tag zu integrieren, erhalten Sie eine Fehlermeldung, dass sie auch nicht verwandt sind.

Hilfe !?

Antwort

0

In Ihrer Definition ist Post mit Tag verknüpft. Aber weder Post noch Tag sind ItemTagReaction und ItemTag zugeordnet.

Sie müssen ItemTagReaction mit Post oder Tag verknüpfen. Dann können Sie es entweder einschließen (Post) oder Nest es einschließen (Tag).

Verwandte Themen