Sequelize.js急切地在多对多的表中加载

我有两个表,用户和MControllers。 他们通过称为历史的另一个表具有多对多的关系,定义如下:

var History = sequelize.define("History", { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, message: { type : DataTypes.STRING, allowNull : false } }, { timestamps: true, updatedAt: false, classMethods: { associate: function(models) { } } }); 

我做了这样的协会:

 MController.belongsToMany(User, {through: History, onDelete: 'cascade' }); User.belongsToMany(MController, {through: History, onDelete: 'cascade' }); 

现在,我需要使用User表格进行热切查询。 像这样的东西:

 historyEntity.findAll({ where : { MControllerId : mcontrollerId }, include : { model : this.User } }); 

但我收到以下错误:

 [Error: User is not associated to History!] 

如果我检查历史模型,它确实没有任何关联。 我如何使这个查询成为可能?

编辑:我试图查询用户表,急于加载历史表,没有成功。 它告诉我,用户与历史没有关联,事实上,这是不正确的,因为我检查了用户模型,它说:

 { History: [Object], UserMController: [Object], OauthAccessTokensUsers: [Object], OauthRefreshTokensUsers: [Object] }, 

在讨论您的需求@Renan后,我build议将User模型与MController关联两次,一个作为User ,一个作为Activator

 // normal users MController.belongsToMany(User, {through: 'MControllerUsers', onDelete: 'cascade' }); User.belongsToMany(MController, {through: 'MControllerUsers', onDelete: 'cascade' }); // activator users MController.belongsToMany(User, {through: 'MControllerActivators', onDelete: 'cascade', as: 'Activator' }); User.belongsToMany(MController, {through: 'MControllerActivators', onDelete: 'cascade', as: 'Activator' }); 

这样,您可以将相同的模型User链接到MController并具有两个不同的angular色,从而允许您为每个MController拥有多个UserActivator

看着你的关联,为什么你有models.User和在其他地方只有User ? 检查是否解决了一些问题。

如果没有,我已经解决了这个使用

History.hasOne(MController); History.hasOne(User);