如何使用Sequelize建立关系

时间:2016-01-27 15:15:13

标签: javascript node.js postgresql sequelize.js

我希望有人可以帮我正确设置Sequelize中的关系。我相信我已经正确设置了模型,但我不确定,因为我之前从未使用过api,文档很混乱。我附上了一张我认为表格应该是什么样子的图片,下面是我认为应该发生的一些代码片段,但我无法说明。

关于我的数据库设计是否准确的任何指示,以及我的续集关联(hasMany,belongsTo等)是否正确将是非常有用的!

用户模型

'use strict';

module.exports = function(sequelize, DataTypes) {

  //Define the user table, and its columns, data types, attributes
  var User = sequelize.define('User', {
    user_id: {...},
    user_name: {...}
   },    
   {
     //Define the constraints, such as foreign key
     classMethods:{
        associate: function(models) {
            User.belongsToMany(models.Group);
            User.hasMany(models.Old_Password);
        }
     }
   }); 

  return User;
};

角色模型

'use strict';

module.exports = function(sequelize, DataTypes){

  var Role = sequelize.define('Role',{
    role_id: {...},
    role_name:{...}
   },
   {
   //Define the constraints, such as foreign key
     classMethods:{
        associate: function(models){
            Role.belongsTo(models.User);
        }
     }
  }); 

  return Role;
};

群组模型

'use strict';

module.exports = function(sequelize, DataTypes){

  var Group = sequelize.define('group', {
    group_id: {...},
    group_name: {...},                
   });

  return Group;
};

密码模型

'use strict';

module.exports = function(sequelize, DataTypes){

  //Define the table, and its columns, data types, attributes
  var Old_Password = sequelize.define('Old_Password', {
    old_password_id: {...},
    old_password_value: {...}
   },    
  {
  //Define the constraints, such as foreign key
    classMethods:{
        associate: function(models){
            Old_Password.hasOne(models.User);
        }
    }
  }); 

  return Old_Password;
};

Sample Table Setup

1 个答案:

答案 0 :(得分:0)

数据库设计准确。但是,您需要定义UserGroup之间的关系。这是一个多对多关系,因此您需要为User模型添加另一个约束:

classMethods:{
  associate: function(models){
    User.belongsToMany(models.Group, {
      // Define the join table
      through: 'user_group',
      // Define the foreign key
      foreignKey: 'group_id'
    });
    models.Group.belongsToMany(User, {
      through: 'user_group',
      foreignKey: 'user_id'
    });
    User.hasMany(models.Old_Password);
  }
}