> 웹 프론트엔드 > JS 튜토리얼 > 마이그레이션 순서화

마이그레이션 순서화

Linda Hamilton
풀어 주다: 2024-12-25 08:21:10
원래의
527명이 탐색했습니다.

내 기본 할일 프로젝트의 메타데이터 테이블에 대한 다음과 같은 후속 모델이 주어지면, 후속작의 마이그레이션을 사용하여 몇 가지 변경을 적용하고 싶습니다.

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 명령은 변경 사항을 제거하기 위해 실행됩니다. 마이그레이션을 수행할 때 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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿