Sequelize迁移:更新列属性后更新模型

我已经完成了。 在更改状态列属性之后,我遇到更新行的问题。

up: function(queryInterface, Sequelize) { return queryInterface.changeColumn('projects', 'status', { type: Sequelize.ENUM('processing', 'unassigned', 'ongoing', 'completed'), allowNull: false, defaultValue: 'unassigned' }).then(function() { return Project.update({ status: 'unassigned' }, { where: { status: 'processing' } }); }); } 

Project.update()在任何情况下似乎都不起作用,但改变了列的属性。

任何想法的家伙? 我在某种程度上是续集的新手,任何想法都将是一个很大的帮助。 谢谢。

取决于你如何执行迁移(通过sequelize-cli或通过umzug编程)。 有一个不同的方式来通过ORM公开表。

在你的情况下,你有queryInterface作为parameter passing给你的函数。 所以你可以通过附加的sequelize属性做一个“原始查询”。

 up: function(queryInterface, Sequelize) { return queryInterface.changeColumn('projects', 'status', { type: Sequelize.ENUM('processing', 'unassigned', 'ongoing', 'completed'), allowNull: false, defaultValue: 'unassigned' }).then(function() { return queryInterface.sequelize .query("UPDATE projects SET status='unassigned' WHERE status='processing'"); }); } 

通过这样做,您将对您的数据库进行原始查询。

您可以查看这个要点,以获得有关在迁移中使用ORM的高级方法的更多详细信息。

我是以编程方式使用umzug的粉丝,它执行迁移并提供数据库的初始化模型。 如果你正确地configuration它,你将受益于暴露的模型(例如sequelize.model('project').update() ),并有一个更好看的代码。