Rumah >hujung hadapan web >tutorial js >Sekuel penghijrahan

Sekuel penghijrahan

Linda Hamilton
Linda Hamiltonasal
2024-12-25 08:21:10527semak imbas

Memandangkan model jujukan berikut untuk jadual metadata projek todo asas saya, saya ingin membuat beberapa perubahan menggunakan migrasi 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 menggunakan fail migrasi yang pada asasnya seperti komit pangkalan data. Untuk membuat jenis fail migrasi dalam baris arahan anda:

npx sequelize-cli migration:generate --name data-columns-rename

Ini akan mencipta fail migrasi dengan templat dalam folder /migrations dan nama yang anda berikan dalam arahan di atas (dalam kes ini data-columns-rename.js dengan tarikh/masa semasa di hadapan).

Fail pemindahan templat dibuat untuk anda:

'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');
     */
  }
};

Arahan async up ialah perintah yang dijalankan untuk cuba membuat perubahan pada jadual dan perintah async down dijalankan untuk mengalih keluar perubahan. Apabila anda melakukan migrasi anda, pastikan arahan bawah adalah terbalik.

Dalam kes saya, saya cuba melakukan beberapa perubahan nama lajur untuk beberapa maklumat jadual jenis todo asas supaya jadual migrasi saya yang diisi kelihatan seperti ini:

'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')
  }
};

(Perubahan ini hanyalah saya masih belum digunakan untuk kes ular seperti yang dikehendaki oleh postgres)

Setelah jadual migrasi sedia, jalankannya dengan arahan ini

npx sequelize-cli db:migrate

Antara cetakan lain daripada menjalankan arahan, teks utama untuk saya melihat kejayaan ialah:

== 20241224113716-metadata-columns-rename: migrating =======
== 20241224113716-metadata-columns-rename: migrated (0.065s)

Dan anda boleh melihat perubahan yang disahkan dalam tangkapan skrin ini daripada DBeaver:

Sequelize migrations

Beri tahu saya jika ada minat dalam siaran yang menerangkan asas-asas permulaan dengan sekuel.

Atas ialah kandungan terperinci Sekuel penghijrahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn