我有两个表,用户和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: [Object],
UserMController: [Object],
OauthAccessTokensUsers: [Object],
OauthRefreshTokensUsers: [Object] },
2 回答
在讨论了你的需求@Renan后,我建议将
User
模型与MController
关联两次,一个为User
,另一个为Activator
.通过这种方式,您可以将相同的模型
User
链接到MController
并具有两个不同的角色,允许您为每个MController提供多个User
和Activator
s看着你的协会,为什么你有
models.User
而在其他地方只有User
?检查是否修复了某些问题 .如果没有,我就是在解决这个问题
History.hasOne(MController); History.hasOne(User);