未处理的拒绝SequelizeForeignKeyConstraintError:在表上插入或更新

时间:2018-11-19 09:50:27

标签: postgresql sequelize.js sequelize-cli

我使用sequelize-cli进行迁移:

我的迁移代码:

module.exports = {
 up(queryInterface, Sequelize) {
   queryInterface.showAllSchemas({
     options: {},
   }).then((data) => {
     data.forEach(schema => queryInterface.addColumn({
       tableName: 'visitors',
       schema, // dynamic schemas coming from loop
     }, 'purposeId', {
       type: Sequelize.INTEGER,
       references: {
         model: 'purposes', // name of Target model
         key: 'id', // key in Target model that we're referencing
       },
     }));
   });
 },
};

我有多个模式,在其中有一个名为“ visitors”的表,我想在该表中添加“目的”表中名为“目的ID”引用的列。

迁移成功完成,我的“ visitors”表中也有一个PurposeId列。

但是,如果我在“ visitors”表中执行crud操作,则会收到此错误:

未处理的拒绝SequelizeForeignKeyConstraintError:在表“ visitors”上插入或更新违反了外键约束“ visitors_purposeId_fkey”

注意:我正在使用postgres。

1 个答案:

答案 0 :(得分:1)

实际上,我使用constraints:false解决了这个问题。

我从迁移中删除了这些引用。

我的迁移代码:

module.exports = {
 up(queryInterface, Sequelize) {
   queryInterface.showAllSchemas({
     options: {},
   }).then((data) => {
     data.forEach(schema => queryInterface.addColumn({
       tableName: 'visitors',
       schema,
     }, 'purposeId', {
       type: Sequelize.INTEGER,
     }));
   });
 },

 down(queryInterface, Sequelize) {
   queryInterface.showAllSchemas({
     options: {},
   }).then((data) => {
     data.forEach(schema => queryInterface.removeColumn({
       tableName: 'visitors',
       schema,
     }, 'purposeId', {
       type: Sequelize.INTEGER,
     }));
   });
 },
};

在我的Sequelize模型中:

Visitor.belongsTo(Purpose, { constraints: false });