Sequelize cli 创建关联属于用户或员工
Sequelize cli creating association belongsto user or staff
我发现了很多关于关联的事情,但对我的具体情况一无所知,
我创建了一些模型并尝试将它们关联起来,
所以我认为这也是理解数据库建模的问题。
我有模型 user 和 staff,它们共享一个属性 user_id。
user.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;
};
staff.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 引用给用户或工作人员,那么什么是正确的解决方案?
使用 staffkeys 和 userkeys 制作两个模型?
提前致谢,
大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_id
和 sshkey_id
都是没有约束的字符串,这使得它们非常糟糕 foreignKey
并且设计起来很糟糕数据库。要获取用户及其 Sshkey:
User.findAll({
where: {},
include: [ { model: Sshkey } ]
});
我发现了很多关于关联的事情,但对我的具体情况一无所知,
我创建了一些模型并尝试将它们关联起来,
所以我认为这也是理解数据库建模的问题。
我有模型 user 和 staff,它们共享一个属性 user_id。
user.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;
};
staff.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 引用给用户或工作人员,那么什么是正确的解决方案?
使用 staffkeys 和 userkeys 制作两个模型?
提前致谢,
大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_id
和 sshkey_id
都是没有约束的字符串,这使得它们非常糟糕 foreignKey
并且设计起来很糟糕数据库。要获取用户及其 Sshkey:
User.findAll({
where: {},
include: [ { model: Sshkey } ]
});