我有两个表:用户和警报。用户应该能够对警报投赞成票和反对票。
我的模型是这样定义的:
提醒
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) 的实现方式是什么?
我应该使用 belongToMany() 吗? 像这样的东西:
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 ;
};
最佳答案
User
和 Alert
之间存在“多对多”关系:
- 一个
用户
可以投票给零个或多个Alert
Alert
可以由零个或多个User
投票
此外,该关系具有 upVote
和 downVote
属性(我不会讨论您的设计以具有这两个属性,因为我不知道细节用例)。
因此,您需要在 User
和 Alert
上使用 .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来自官方文档。
关于javascript - sequelize 上的多个外键(一对多或多对多)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129214/