gpt4 book ai didi

javascript - sequelize 上的多个外键(一对多或多对多)?

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:48 25 4
gpt4 key购买 nike

我有两个表:用户和警报。用户应该能够对警报投赞成票和反对票。

我的模型是这样定义的:

提醒

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 ;
};

最佳答案

UserAlert 之间存在“多对多”关系:

  • 一个用户可以投票给零个或多个Alert
  • Alert 可以由零个或多个 User 投票

此外,该关系具有 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来自官方文档。

关于javascript - sequelize 上的多个外键(一对多或多对多)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com