首頁 >web前端 >js教程 >連續遷移

連續遷移

Linda Hamilton
Linda Hamilton原創
2024-12-25 08:21:10527瀏覽

鑑於我的基本待辦事項專案的元資料表有以下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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn