我正在用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')