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拥有多个User
和Activator
看着你的关联,为什么你有models.User
和在其他地方只有User
? 检查是否解决了一些问题。
如果没有,我已经解决了这个使用
History.hasOne(MController); History.hasOne(User);