我有三个表:survey、survey_owners(联接表)、用户。调查自然有标题并且归用户所有。一个用户可以拥有多个调查,一个调查可以由多个用户拥有(多对多关系)。
我在survey_owners 表上设置了唯一约束,因此没有重复,但现在需要弄清楚如何强制执行唯一约束以解决以下问题:用户不应拥有多个具有相同标题的调查。
也就是说,不能在调查表的“标题”列上放置唯一约束,因为只有在用户已经拥有同名调查的情况下才应应用唯一性。
任何想法如何在 Sequelize 迁移和/或模型中实现这一点?
Survey_owners 的当前迁移文件
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('survey_owners', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
surveys_id: {
type: Sequelize.INTEGER,
onDelete: 'CASCADE',
references: {
model: 'surveys',
key: 'id'
}
},
users_id: {
type: Sequelize.INTEGER,
references: {
model: 'users',
key: 'id'
}
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
field: "created_at"
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
field: "updated_at"
}
})
.then(() => {
return queryInterface.addConstraint('survey_owners', ['surveys_id', 'users_id'], {
type: 'unique',
name: 'survey_owners'
});
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('survey_owners');
}
};
最佳答案
不幸的是,我无法在 Sequelize 中找到处理此约束的方法,因此我正在处理提交操作的逻辑并检查 JS 方法。不是最好的方法,但必须继续前进,这是有效的。
关于postgresql - Sequelize 跨两个表的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765280/