两张同一张表的外键在一张表中继续

我的团队成员模型: –

var teamMember = { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, level: DataTypes.INTEGER, supervisorId: { type: DataTypes.INTEGER, references: { model: "employees", key: "id" } }, employeeId: { type: DataTypes.INTEGER, unique: true, references: { model: "employees", key: "id" } } 

并有员工模型

制图: –

 db.employee.hasOne(db.teamMember); db.teamMember.belongsTo(db.employee); 

我的查询function

  db.teamMember.findOne({ where: { employeeId: req.employee.id }, include: [db.employee] }) .then(teamMember => { if (!teamMember) { throw ('no teamMember found'); } consol.log(teamMember) }) 

我的团队成员表就像=

ID ——雇员—— supervisorId

2 ———– 4 ————- 5

问题是 – 所以当我在employeeId为4的teamMember中请求row时,应该包含supervisorId(JOIN),并返回包含4(id)的雇员的行。 我想要第五ID的员工。

supervisorId和employeeId都是对雇员表的反馈。

您不需要在模型上设置员工和主pipe的字段,只需要执行belongsTo它将添加它,并且在那里您可以指定if是唯一的,并使用“as”,以便您可以与员工知道您正在参考join,正式员工或主pipe,这样的事情:

 db.teamMember.belongsTo(db.employee, {as: 'SupervisorId'}); db.teamMember.belongsTo(db.employee, {as: 'RegularEmployeeId'}); 

然后在你的查询添加像这样的包括:

 include: [{ model: db.employee, as: 'SupervisorId }]