簡體   English   中英

對兩個表格進行獨特約束

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM