gpt4 book ai didi

node.js - Sequelize.js 在多对多表中急切加载

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:52 24 4
gpt4 key购买 nike

我有两个表,Users 和 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' });

现在,我需要通过急切加载用户表来查询历史记录表。像这样的事情:

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 讨论您的需求后,我建议将 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 并拥有两个不同的角色,从而使每个 MController 可以拥有多个 UserActivator

关于node.js - Sequelize.js 在多对多表中急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com