两张同一张表的外键在一张表中继续
我的团队成员模型: –
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 }]