首页 文章

Sequelize cli创建协会属于用户或员工

提问于
浏览
0

我找到了很多关于协会的事情,但对我的具体案例没什么
我创建了一些模型,我试图将它们联系起来,
所以我认为这也是理解数据库建模的问题 .

我有模型用户和员工,都共享属性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,可以属于用户或工作人员 .
我还没有完成任何迁移 .
如果我可以写作或做以下事情,我就会好奇心:'m pretty new to Js and creating databases, thinking about the database models and the associations, and i'

'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创建两个模型?
提前致谢,

BigZ

1 回答

  • 1

    如果你想要一个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 } ]
    });
    

相关问题