【问题标题】:Sequelize Migration: update model after updating column attributesSequelize Migration:更新列属性后更新模型
【发布时间】:2016-12-04 22:02:51
【问题描述】:

我会直截了当。更改状态列属性后,我在更新行时遇到问题。

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() 似乎在任何情况下都不起作用,但更改列的属性是有效的。

有什么想法吗?我不知何故是续集的新手,任何想法都会有很大帮助。谢谢。

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    取决于您执行迁移的方式(通过 sequelize-cli 或以编程方式通过 umzug )。有一种不同的方式通过 ORM 公开表。

    在您的情况下,您将 queryInterface 作为参数传递给您的函数。因此,您可以通过附加的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'");
        });
    }
    

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

    您可以查看this gist,了解有关在迁移中使用 ORM 的高级方法的更多详细信息。

    我喜欢以编程方式使用umzug,它执行迁移并提供数据库的初始化模型。如果配置得当,您将受益于暴露的模型(例如sequelize.model('project').update())并拥有更好看的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 2017-12-13
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多