所以我发现自己陷入了试图在M:N关系中使用包含预先加载功能的麻烦
用户模型关系:
User.belongsToMany(models.rol, {
through: {
model: models['usuario_rol']
},
as: {
plural: 'roles',
singular: 'rol'
},
foreignKey: 'idusuario'
});
rol模型关系:
Rol.belongsToMany(models.usuario, {
through: {
model: models['usuario_rol']
},
foreignKey: 'idrol'
});
最后查询:
db.usuario.findOne({
where: {
id: insert.id
},
include: [
{
model: db.rol
}
]
});
如果我们尝试这个,它会崩溃并出现错误:rol与usuario没有关联!
奇怪的是,使用sequelize用户对象的实例,我可以使用user.getRoles()获取角色
你知道为什么会这样吗?
答案 0 :(得分:1)
在关联函数中指定别名(在本例中为roles
)时,您必须将其传递给include:
return User.findOne({
where: {
id: 52
},
include: [
{
model: rol,
as: 'roles'
}
]
});
你也可以保存关联并传递它:
User.Roles = User.belongsToMany(models.rol, {
through: {
model: models['usuario_rol']
},
as: {
plural: 'roles',
singular: 'rol'
},
foreignKey: 'idusuario'
});
return User.findOne({
where: {
id: 52
},
include: [
{
association: User.Roles
}
]
});