簡體   English   中英

如何使用引用同一表的 2 個外鍵創建續集 model

[英]How to create a sequelize model with 2 foreign keys referencing the same table

我創建了這個續集 model 來存儲員工詳細信息,但由於某種原因,沒有創建外鍵,這些是我采用的模型和方法

部門 Model

module.exports = (sequelize, Sequelize) => {
    const Department = sequelize.define("department",{
        department_id:{
            type: Sequelize.UUID,
            defaultValue: Sequelize.UUIDV4,
            allowNull: false,
            unique: true,
            primaryKey:true
        },
        supervisor_id:{
            type: Sequelize.UUID,
            allowNull: true,
            references:{
                model:"users",
                key:"user_id"
            }
        },
        employee_id:{
            type: Sequelize.UUID,
            allowNull: true,
            references:{
                model:"users",
                key:"user_id"
            }
        }
    })
    return Department
}

用戶 Model

module.exports = (sequelize, Sequelize) => {
    const User = sequelize.define("user",{
        user_id:{
            type: Sequelize.UUID,
            defaultValue: Sequelize.UUIDV4,
            allowNull: false,
            unique: true,
            primaryKey:true
        },
        username:{
            type: Sequelize.STRING,
            allowNull: false,
        },
        password:{
            type: Sequelize.STRING,
            allowNull: false,
        },
        email:{
            type: Sequelize.STRING,
            allowNull: false,
            unique: true,
        },
        date_of_birth:{
            type: Sequelize.DATE,
            allowNull: false,
        },
        phone_number:{
            type: Sequelize.STRING,
            allowNull: false,
            unique: true,
        }

    })
    return User
}

這些是我試圖做出限制的方法

一:這個創建表但是約束不起作用,我無法獲取用戶數據

db.users.hasMany(db.matches, {as: 'employee_id_fk', foreignKey: 'employee_id'});
db.users.hasMany(db.matches, {as: 'supervisor_id_fk', foreignKey: 'supervisor_id'});

二:這個方法給我一個Error: Cyclic dependency found. users is dependent of itself. Dependency chain: users -> matches => users Error: Cyclic dependency found. users is dependent of itself. Dependency chain: users -> matches => users

db.matches.hasMany(db.users, {as: 'employee_id_fk', foreignKey: 'employee_id'});
db.matches.hasMany(db.users, {as: 'supervisor_id_fk', constraints: false, allowNull:true, defaultValue:null});
db.users.belongsTo(db.matches, {foreignKey: 'employee_id', constraints: false, allowNull:true, defaultValue:null})
db.users.belongsTo(db.matches, {foreignKey: 'supervisor_id', constraints: false, allowNull:true, defaultValue:null})

三:這個方法也報上面的錯誤

db.users.belongsTo(db.matches, {foreignKey: 'employee_id'})
db.users.belongsTo(db.matches, {foreignKey: 'supervisor_id'})

有沒有辦法解決這個問題,我嘗試了 StackOverflow 的多種解決方案,但無法讓它工作。

我創建了這個續集 model 來存儲員工詳細信息,但由於某種原因,沒有創建外鍵,這些是我采用的模型和方法

部門 Model

module.exports = (sequelize, Sequelize) => {
    const Department = sequelize.define("department",{
        department_id:{
            type: Sequelize.UUID,
            defaultValue: Sequelize.UUIDV4,
            allowNull: false,
            unique: true,
            primaryKey:true
        },
        supervisor_id:{
            type: Sequelize.UUID,
            allowNull: true,
            references:{
                model:"users",
                key:"user_id"
            }
        },
        employee_id:{
            type: Sequelize.UUID,
            allowNull: true,
            references:{
                model:"users",
                key:"user_id"
            }
        }
    })
    return Department
}

用戶 Model

module.exports = (sequelize, Sequelize) => {
    const User = sequelize.define("user",{
        user_id:{
            type: Sequelize.UUID,
            defaultValue: Sequelize.UUIDV4,
            allowNull: false,
            unique: true,
            primaryKey:true
        },
        username:{
            type: Sequelize.STRING,
            allowNull: false,
        },
        password:{
            type: Sequelize.STRING,
            allowNull: false,
        },
        email:{
            type: Sequelize.STRING,
            allowNull: false,
            unique: true,
        },
        date_of_birth:{
            type: Sequelize.DATE,
            allowNull: false,
        },
        phone_number:{
            type: Sequelize.STRING,
            allowNull: false,
            unique: true,
        }

    })
    return User
}

這些是我試圖做出限制的方法

一:這個創建表但是約束不起作用,我無法獲取用戶數據

db.users.hasMany(db.matches, {as: 'employee_id_fk', foreignKey: 'employee_id'});
db.users.hasMany(db.matches, {as: 'supervisor_id_fk', foreignKey: 'supervisor_id'});

二:這個方法給我一個Error: Cyclic dependency found. users is dependent of itself. Dependency chain: users -> matches => users Error: Cyclic dependency found. users is dependent of itself. Dependency chain: users -> matches => users

db.matches.hasMany(db.users, {as: 'employee_id_fk', foreignKey: 'employee_id'});
db.matches.hasMany(db.users, {as: 'supervisor_id_fk', constraints: false, allowNull:true, defaultValue:null});
db.users.belongsTo(db.matches, {foreignKey: 'employee_id', constraints: false, allowNull:true, defaultValue:null})
db.users.belongsTo(db.matches, {foreignKey: 'supervisor_id', constraints: false, allowNull:true, defaultValue:null})

三:這個方法也報上面的錯誤

db.users.belongsTo(db.matches, {foreignKey: 'employee_id'})
db.users.belongsTo(db.matches, {foreignKey: 'supervisor_id'})

有沒有辦法解決這個問題,我嘗試了 StackOverflow 的多種解決方案,但無法讓它工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM