gpt4 book ai didi

mysql - Sequelize cli 创建属于用户或员工的关联

转载 作者:行者123 更新时间:2023-11-29 11:05:45 25 4
gpt4 key购买 nike

我发现了很多关于关联的东西,但对我的具体情况没有发现,
我创建了一些模型,并尝试将它们关联起来,
所以我认为这也是理解数据库建模的问题。

我有模型用户和员工,两者共享一个属性 user_id。

用户.js

'use strict';
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
user_id: DataTypes.STRING,
fullname: DataTypes.STRING,
username: DataTypes.STRING,
comment: DataTypes.TEXT
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
User.hasMany(models.Sshkey, {foreignKey: 'sshkey_id'})
}
}
});
return User;
};

员工.js

'use strict';
module.exports = function(sequelize, DataTypes) {
var Staff = sequelize.define('Staff', {
user_id: DataTypes.STRING,
fullname: DataTypes.STRING,
username: DataTypes.STRING,
password: DataTypes.STRING,
isAdmin: DataTypes.BOOLEAN
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
Staff.hasMany(models.Sshkey, {foreignKey: 'sshkey_id'})
}
}
});
return Staff;
};

我有一个模型 sshkey,它可以属于用户或工作人员。
我正在使用 Sequelize cli,但尚未完成任何迁移。
我对 Js 和创建数据库相当陌生,考虑数据库模型和关联,我很好奇我是否可以编写或执行以下操作:

'use strict';
module.exports = function(sequelize, DataTypes) {
var Sshkey = sequelize.define('Sshkey', {
sshkey_id: DataTypes.STRING,
sshkey: DataTypes.TEXT
}, {
classMethods: {
associate: function(models) {
// associations can be defined here

// My Problem starts here |
// Should i write |
// |
// V

Sshkey.hasOne(models.User || models.Staff, {foreignKey: 'user_id'})

// Or maybe:
// Sshkey.hasOne(models.User, {foreignKey: 'user_id'}) ||
// Sshkey.hasOne(models.Staff, {foreignKey: 'user_id'})
// Should i rather rename models.Staffs foreignKey user_id to staff_id?

// Or maybe:
// Sshkey.hasOne(models.User, {as: 'userkey', foreignKey: 'user_id'})
// Sshkey.hasOne(models.Staff, {as: 'staffkey', foreignKey: 'user_id'})

}
}
});
return Sshkey;
};

如果我稍后想要将 sshkey 引用给用户或工作人员,那么对于这个问题,正确的解决方案是什么?
使用员工 key 和用户 key 制作两个模型?
提前致谢,

大Z

最佳答案

如果您想要 1:m 关系,其中外键 user_id 添加到 Sshkey 模型,则应为:

User.hasMany(models.Sshkey, {foreignKey: 'user_id'});
Staff.hasMany(models.Sshkey, {foreignKey: 'user_id'});
Sshkey.belongsTo(models.User, {foreignKey: 'user_id'});
Sshkey.belongsTo(models.Staff, {foreignKey: 'user_id'});

我对您的示例遇到的一个问题是,user_idsshkey_id 都是没有任何约束的字符串,这使得它们非常糟糕foreignKey 对于设计数据库来说非常糟糕。获取用户及其 Sshkey:

User.findAll({
where: {},
include: [ { model: Sshkey } ]
});

关于mysql - Sequelize cli 创建属于用户或员工的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com