N:M 使用 sequelizejs 预先加载(包括)
N:M eager loading (include) using sequelizejs
所以我发现自己在 M:N 关系
中尝试使用 include eager loading 功能时遇到了麻烦
用户模型关系:
User.belongsToMany(models.rol, {
through: {
model: models['usuario_rol']
},
as: {
plural: 'roles',
singular: 'rol'
},
foreignKey: 'idusuario'
});
角色模型关系:
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()
获取角色
你知道为什么会这样吗?
当您在关联函数中指定别名时(在本例中为 roles
),您还必须将其传递给包含:
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
}
]
});
所以我发现自己在 M:N 关系
中尝试使用 include eager loading 功能时遇到了麻烦用户模型关系:
User.belongsToMany(models.rol, {
through: {
model: models['usuario_rol']
},
as: {
plural: 'roles',
singular: 'rol'
},
foreignKey: 'idusuario'
});
角色模型关系:
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()
获取角色你知道为什么会这样吗?
当您在关联函数中指定别名时(在本例中为 roles
),您还必须将其传递给包含:
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
}
]
});