我正在用Sequelize5.5.0开发一个应用程序。我创建了一些模型;比如courses和coursecategory是数据库中的一些表。我需要将foring key courseCategory添加到课程表中。。。
(一个类别有许多课程)
但是当我用addConstraint()创建迁移和添加约束时,一切正常,但是当还原时,显示错误
我明白,如果我在BEGGIN中创建约束,我可以解决这个问题,但在我的例子中,我将迁移一个PROCECT,并且在现有数据库中有很多记录。例如,在以后的例子中,如果我想创建一个约束,并且我创建了迁移,我就不能恢复它
后来我有了这样的课程模式。。

const Course = sequelize.define('Course', {
   //attributes
        courseId:{
            type: DataTypes.INTEGER.UNSIGNED,
            allowNull : false,
            autoIncrement: true,
            primaryKey: true,
        },
        category:{
            type: DataTypes.INTEGER.UNSIGNED,
            allowNull:false,
            defaultValue: 1
        }
      });




我的课程分类模型

    const Coursecategory = sequelize.define('Coursecategory', {
        //atributes
        coursecategoryId:{
            type: DataTypes.INTEGER.UNSIGNED,
            allowNull : false,
            autoIncrement: true,
            primaryKey: true,
        },
        name:{
            type: DataTypes.STRING,
            allowNull:true
        },
        order:{
            type: DataTypes.SMALLINT.UNSIGNED,
            allowNull:false,
            defaultValue: 0
        }
      }, {});


我的约束迁移就在这里。。。

    up: (queryInterface, Sequelize) => {

          return  await  queryInterface.addConstraint('courses', ['category'], {
                type: 'foreign key',
                name: 'courses_category_coursecategories_fk',
                references: {
                  table: 'coursecategories',
                  field: 'coursecategoryId',
                },
                defaultValue: 0,
                allowNull: true,
                onDelete: 'no action',
                onUpdate: 'no action',
              })
          },

      down: async (queryInterface, Sequelize) => {

             return await queryInterface.removeConstraint('courses', ['courses_category_coursecategories_fk'],{})

          }



我希望这次迁移顺利。我查看信息模式表,我的密钥(courses_category_coursecategories_fk)在那里。但有些事情发生了,我没有收到更多的日志。。
ERROR: s.replace is not a function

最佳答案

removeConstraint接受字符串作为第二个参数,而不是数组,请参见docs。应该这样工作:

return await queryInterface.removeConstraint('courses','courses_category_coursecategories_fk')

10-07 19:38