gpt4 book ai didi

sequelize.js - Sequelize 模型中跨外键的唯一约束

转载 作者:行者123 更新时间:2023-12-04 02:07:17 33 4
gpt4 key购买 nike

我有一个与其他模型相关联的简单 Sequelize 模型。

module.exports = function (sequelize, DataTypes) {
var Votes = sequelize.define('Votes', {
isUpVote: DataTypes.BOOLEAN
}, {
classMethods: {
associate: function (models) {
Votes.belongsTo(models.Track);
Votes.belongsTo(models.User);
}
}
});

return Votes;
}

Sequelize 将生成一个带有 id 的表, TrackId , UserIdisUpVote .

我想设置一个 UNIQUETrackId 的约束和 UserId (即确保给定轨道和用户只有一个投票记录的复合索引)。

如何做到这一点?

最佳答案

您可以使用唯一约束并为其提供字符串而不是 bool 值。然后另一个具有相同字符串的其他字段将成为同一复合索引的一部分。

即:

module.exports = function (sequelize, DataTypes) {
var Votes = sequelize.define('Votes', {
isUpVote: {
type: DataTypes.BOOLEAN,
unique: 'myCompositeIndexName'
},
TrackId: {
type: DataType.INTEGER
unique: 'myCompositeIndexName',
},
UserId: {
type: DataType.INTEGER
unique: 'myCompositeIndexName',
}
}, {
classMethods: {
associate: function (models) {
Votes.belongsTo(models.Track);
Votes.belongsTo(models.User);
}
}
});

return Votes;
}

(^未测试,就在我的头顶上!)

这样做的问题是这只会在创建表期间发生。如果您的表已经存在,您可以使用 sequelize-cli 的迁移功能来实现这一点。

我真的希望这有助于其他至少为您指明正确的方向。如果你仍然卡住,我建议你去 IRC channel 看 Sequelize ,因为它似乎很活跃。

关于sequelize.js - Sequelize 模型中跨外键的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551941/

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