Rumah > hujung hadapan web > tutorial js > Sekuel penghijrahan

Sekuel penghijrahan

Linda Hamilton
Lepaskan: 2024-12-25 08:21:10
asal
523 orang telah melayarinya

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;
  };
Salin selepas log masuk

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
Salin selepas log masuk

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');
     */
  }
};
Salin selepas log masuk

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

Salin selepas log masuk

(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
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan