我的团队成员模型:-

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);

我的查询功能
        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

问题是-:因此,当我要在teamMember中要求其employeeId为4的行时,该行应与supervisorId(JOIN)包括在一起,并且它返回包含4(id)的雇员的行。我要第5个id的员工。

supervisorId和employeeId都引用到employee表中。

最佳答案

您无需在模型上设置员工和主管的字段,只需执行belongToTo即可将其添加,然后可以在其中指定if唯一,并使用“as”,这样您就可以知道员工在引用什么加入,正式员工或主管,如下所示:

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

然后在您的查询中添加包含内容,如下所示:
include: [{
    model: db.employee,
    as: 'SupervisorId
}]

10-07 17:28