首页 > web前端 > js教程 > 连续迁移

连续迁移

Linda Hamilton
发布: 2024-12-25 08:21:10
原创
558 人浏览过

鉴于我的基本待办事项项目的元数据表有以下sequelize模型,我想使用sequelize的迁移进行一些更改。

module.exports = (sequelize, Sequelize) => {
    const Metadata = sequelize.define("metadata", {
      id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
      },     
      urgencyId: {
        type: Sequelize.INTEGER,
        allowNull: true
      },      
      dataId: {
        type: Sequelize.INTEGER,
        allowNull: true
      },      
      taskTypeId: {
        type: Sequelize.INTEGER,
        allowNull: true
      },  
      projectId: {
        type: Sequelize.INTEGER,
        allowNull: true
      },
      data_id: {
        type: Sequelize.INTEGER,
        allowNull: true
      },    
    });
    Metadata.associate = function (models) {
      Metadata.belongsTo(models.data,{
        foreignKey: {
          name: 'data_id',
          allowNull: false,
          hooks: true
        },
        onDelete: 'cascade'

      });

    };

    return Metadata;
  };
登录后复制

Sequelize 使用本质上类似于数据库提交的迁移文件。 要在命令行中创建迁移文件类型:

npx sequelize-cli migration:generate --name data-columns-rename
登录后复制

这将创建一个迁移文件,其中包含 /migrations 文件夹中的模板以及您在上面命令中提供的名称(在本例中为 data-columns-rename.js,前面带有当前日期/时间)。

为您创建的模板迁移文件:

'use strict';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    /**
     * Add altering commands here.
     *
     * Example:
     * await queryInterface.createTable('users', { id: Sequelize.INTEGER });
     */
  },

  async down (queryInterface, Sequelize) {
    /**
     * Add reverting commands here.
     *
     * Example:
     * await queryInterface.dropTable('users');
     */
  }
};
登录后复制

async up 命令是它运行以尝试对表进行更改的命令,async down 命令运行以删除更改。 当您进行迁移时,请确保向下命令相反。

就我而言,我正在尝试对一些基本的待办事项类型表信息进行一些列名称更改,因此我填写的迁移表如下所示:

'use strict';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    await queryInterface.removeColumn('metadata','dataId')
// renameColumn: table, old column name , new column name
    await queryInterface.renameColumn('metadata','urgencyId','urgency_id')
    await queryInterface.renameColumn('metadata','taskTypeId','task_type_id')
    await queryInterface.renameColumn('metadata','projectId','project_id')

  },

  async down (queryInterface, Sequelize) {
    await queryInterface.addColumn('metadata','dataId', {
      type: Sequelize.INTEGER,
      allowNull: false
    })
    await queryInterface.renameColumn('metadata','urgency_id','urgencyId')
    await queryInterface.renameColumn('metadata','task_type_id','taskTypeId')
    await queryInterface.renameColumn('metadata','project_id','projectId')
  }
};

登录后复制

(这些变化只是我还没有按照 postgres 的要求使用蛇形案例)

迁移表准备就绪后,使用此命令运行它

npx sequelize-cli db:migrate
登录后复制

在运行命令的其他打印输出中,我看到成功的关键文本是:

== 20241224113716-metadata-columns-rename: migrating =======
== 20241224113716-metadata-columns-rename: migrated (0.065s)
登录后复制

您可以在 DBeaver 的屏幕截图中看到验证的更改:

Sequelize migrations

如果您对描述sequelize 入门基础知识的帖子感兴趣,请告诉我。

以上是连续迁移的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板