我试图为我的案件找到解决方案,但没有找到。 我有3张桌子:
Role = sequelize.define('Role', {
name: {
type: Sequelize.STRING
},
permissions: {
type: Sequelize.JSONB
}
});
EmployeeRole = sequelize.define('EmployeeRole', {
employeeId: {
type: Sequelize.INTEGER,
primaryKey: true,
},
roleId: {
type: Sequelize.INTEGER,
primaryKey: true,
}
});
我从sequalize以外的其他渠道获得员工。
我已经在模型文件中为employees表创建了一个好人的对象,如下所示:
const Employee = sequelize.define('Employee', {});
具有以下关联
EmployeeRole.belongsTo(Role, { foreignKey: 'roleId', sourceKey: 'id' });
EmployeeRole.belongsTo(Employee, { foreignKey: 'employeeId' });
我使用员工ID,如何检索员工的角色?
我要实现的目标查询是提供员工ID的以下内容:
select * from "Roles" as r,"EmployeeRoles" as er
where r.id = er."roleId"
and er."employeeId" = 2035
答案 0 :(得分:1)
希望您只需要一个内部联接(您没有任何条件) 试试这样的东西
Employee.findOne({
where:{
id:2330
},
include:[
{model:EmployeeRole,}
include:[
{model:Role,attributes:['name']}
]
]
})
答案 1 :(得分:1)
根据您的描述,我假设每个Employee
可以有多个Role
,每个Role
属于多个Employee
。结果,这具有许多对许多的关联。
您的关联将类似于
Employee.belongsToMany(models.Role, {
through: model.EmployeeRole,
foreignKey: 'employeeId'
});
Role.belongsToMany(models.Employee, {
through: model.EmployeeRole,
foreignKey: 'roleId'
});
您可以撤消员工角色,
models.Employee.findAll({
include: {
model: models.Role,
through: {
attributes: ['id']
}
}
})
希望这对您有帮助...
答案 2 :(得分:0)
谢谢你们。 以下似乎返回正确的值
EmployeeRole.findAll({where:{employeeId: empId},
include: [
{model: Role,attributes:['id','name','permissions'],required: true}
],
attributes:['roleId']
})