[英]Sequelize Unique Constraint Across Two Tables
我有三個表: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方法。 不是最好的方式,但不得不繼續前進,這是有效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.