【发布时间】:2020-11-11 17:03:15
【问题描述】:
我正在尝试通过预定义的表 roleUsers 在用户和角色之间建立多对多关系。
const User = sequelize.define('User', {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.STRING,
password: DataTypes.STRING,
deletedAt: DataTypes.DATE,
},
const Role = sequelize.define('Role', {
roleName: DataTypes.STRING,
},
const RoleUser = sequelize.define('RoleUser', {
userId: {
type: DataTypes.INTEGER,
references: {
model: User,
key: 'id',
},
},
roleId: {
type: DataTypes.INTEGER,
references: {
model: Role,
key: 'id',
},
},
},
Role.belongsToMany(User, {
through: RoleUser,
foreignKey: 'roleId',
otherKey: 'userId',
as: 'users',
});
User.belongsToMany(Role, {
through: RoleUser,
foreignKey: 'userId',
otherKey: 'roleId',
as: 'roles',
});
但是,当我尝试调用这种关系(或任何其他 M:N 关系 - 1:Ms 和 1:1s 工作正常)时,如下所示
const roles = await Role.findAll({
include: [
{
model: User,
as: 'users',
through: RoleUser,
},
],
});
我收到以下错误
SequelizeEagerLoadingError: User is not associated to Role!
我通常尝试取出东西并以各种组合放回定义中定义的外键、其他键、别名以及改变我调用模型的方式(删除别名等)。我也尝试不在联结表中指定引用。
我的模型和关系被安排在不同的页面上,但它们都很好地结合在一起,因为我可以看到 1:M 关系运行良好,只是我的 M:M 关系搞砸了。如果有任何帮助,我将不胜感激!
【问题讨论】:
标签: sequelize.js many-to-many associations eager-loading junction-table