2015-08-20 39 views
0

我有两个表格:用户和提醒。用户应该能够对警报进行升级和降级。多个外键上的sequelize(一对多或多对多)?

我的模型定义的那样:

警报

module.exports = function(sequelize, DataTypes) { 
    var Alert = sequelize.define("alert", { 
     ID: { type: DataTypes.BIGINT(11).UNSIGNED, primaryKey: true, autoIncrement: true }, 
     title: DataTypes.STRING, 
     alert_type: DataTypes.INTEGER 
    }, 
    { 
     classMethods: { 
      associate: function(models) { 
       Alert.belongsTo(models.user, { 
        onDelete: "CASCADE", 
        foreignKey: { 
         allowNull: false 
        } 
       }); 
      } 
     } 
    }); 
    return Alert; 
}; 

用户

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define("user", { 
     ID: { type: DataTypes.BIGINT(11).UNSIGNED, primaryKey: true, autoIncrement: true }, 
     user_login: DataTypes.STRING(50), 
     user_pass: DataTypes.STRING(50), 
     user_email: DataTypes.STRING(50), 
    }, 
    { 
     classMethods: { 
      associate: function(models) { 
       User.hasMany(models.alert); 
      } 
     } 
    }); 
    return User; 
}; 

什么做它用sequelize.js和MySQL(InnoDB的)的方法是什么?

我应该使用belongsToMany()吗? 喜欢的东西:

module.exports = function(sequelize, DataTypes) { 
    var AlertVote = sequelize.define("user_alert_vote", { 
     ID: { type: DataTypes.BIGINT(11).UNSIGNED, primaryKey: true, autoIncrement: true }, 
     vote_up: DataTypes.INTEGER, 
     vote_down: DataTypes.INTEGER 
    }, 
    { 
     classMethods: { 
     // belongToMany(models.alert, ...); 
     // belongToMany(models.user, ...); 
     } 
    }); 
    return AlertVote ; 
}; 

回答

2

您在这里有一个UserAlert之间的“多对一一对多”的关系:

  • 一个User可以投票零个或多个Alert小号
  • Alert可以被零票或多票投票User s

此外,关系的属性为upVotedownVote(我不会讨论您的设计有这两个属性,因为我不知道用例的详细信息)。

因此,您需要在UserAlert上使用.belongToMany()

一个简短的代码将如下所示:

var User = sequelize.define('User', {}) 
var Alert = sequelize.define('Alert', {}) 
var AlertVote = sequelize.define('AlertVote', { 
    upVote: DataTypes.INTEGER, 
    downVote: DataTypes.INTEGER, 
}) 
Alert.belongsToMany(User, {through: 'AlertVote'}); 
User.belongsToMany(Alert, {through: 'AlertVote'}); 

有关详细信息,请从官方文档,请参阅Belongs-To-Many associations

+0

感谢您的回复,现在运作良好 – sklts