使内部联接具有条件

时间:2019-01-30 20:31:26

标签: node.js sequelize.js

我试图为我的案件找到解决方案,但没有找到。 我有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

3 个答案:

答案 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']
  })