【问题标题】:Two foreign Key of same table in one table in sequelizesequelize中一张表中同一张表的两个外键
【发布时间】:2017-04-21 05:54:40
【问题描述】:

我的团队成员模型:-

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

我的 teamMember 表就像=

id------employeeId-----supervisorId

2 ------------ 4 ------------- 5

问题是 - :所以当我在 teamMember 中询问其employeeId 为 4 的行时,它应该包含在 supervisorId(JOIN) 中,并且它返回包含 4 (id) 的员工的行。我想要第 5 个 ID 的员工。

supervisorId 和employeeId 都参考员工表。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    您不需要在模型上设置员工和主管的字段,只需执行belongTo它就会添加它,您可以在那里指定if是唯一的并使用“as”这样您就可以知道员工是您指的是加入、正式员工或主管,如下所示:

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

    然后在您的查询中添加这样的包含:

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

    【讨论】:

    • 只有我们需要 belongsTo 来包含?他们不需要 hasMany , hasOne ??顺便说一句,您的答案有效。谢谢
    • 在您的特定情况下,belongTo 就足够了。根据您的数据库架构,您将需要 hasMany、hasOne 等。
    • 迁移文件呢,需要创建吗?
    猜你喜欢
    • 2016-08-19
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多