我有两个表,User和MControllers。它们通过名为History的另一个表具有多对多关系,定义如下:
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表的eager-loading来查询History表。像这样:
historyEntity.findAll({
where : {
MControllerId : mcontrollerId
},
include : {
model : this.User
}
});
但我收到以下错误:
[Error: User is not associated to History!]
如果我检查历史模型,它实际上没有任何关联。 如何使此查询成为可能?
编辑: 我尝试查询Users表,急切加载History表,但没有成功。它告诉我用户与历史记录无关,事实并非如此,因为我已经检查了用户模型并且说:
{ History: [Object],
UserMController: [Object],
OauthAccessTokensUsers: [Object],
OauthRefreshTokensUsers: [Object] },
答案 0 :(得分:1)
在讨论了您对@Renan的需求后,我建议您将User
模型与MController
关联两次,一个为User
,另一个为Activator
。< / p>
// 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
并具有两个不同的角色,从而允许每个MController拥有多个User
和Activator
个< / p>
答案 1 :(得分:0)
观看您的关联,为什么您有models.User
,而其他地方只有User
?检查是否有问题。
如果没有,我使用
解决了这个问题
History.hasOne(MController);
History.hasOne(User);