TypeORM - Di chuyển

Di chuyển giống như kiểm soát phiên bản cho cơ sở dữ liệu của bạn. Nó được sử dụng để sửa đổi và chia sẻ lược đồ cơ sở dữ liệu của ứng dụng. Phần này giải thích về cách hoạt động của di chuyển trong TypeORM.

Tạo di chuyển mới

Để tạo một quá trình di chuyển mới, trước tiên chúng ta cần thiết lập kết nối trong ormconfig.json. Nó được định nghĩa dưới đây -

ormconfig.json

"type": "mysql", 
"host": "localhost", 
"port": 8889, 
"username": "root", 
"password": "root", 
"database": "Library", 
"entities": ["entity/*.js"], "migrationsTableName": "student_migration_table", "migrations": ["migration/*.js"], "cli": { 
   "migrationsDir": "migration" 
}

Đây,

  • migrationsTableName - nó đề cập đến tên bảng di chuyển.
  • migrations - TypeORM tải các di chuyển từ thư mục nhất định.
  • cli - cho biết việc di chuyển sẽ tạo bên trong thư mục cụ thể.

Tạo thực thể Sách

Hãy tạo một thực thể có tên Book thực thể bên trong src/entity/Book.ts như sau -

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 
@Entity() 
export class Book { 

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   title: string;
   
   @Column() 
   text: string; 
}

Thực thi CLI để tạo di chuyển mới

Bây giờ, chúng ta có thể thực hiện quá trình di chuyển mới bằng CLI như sau:

Cú pháp

typeorm migration:create -n <migration-name>

Thí dụ

typeorm migration:create -n myMigration

Sau khi thực hiện lệnh trên, bạn có thể thấy phản hồi bên dưới:

Migration /path/to/project/src/migration/1587101104904-myMigration.ts has been generated successfully.

Bây giờ, di chuyển vào trong src/migration/1587101104904-myMigration.ts tệp trông tương tự như thế này.

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class myMigration1587101104904 implements MigrationInterface {      

   public async up(queryRunner: QueryRunner): Promise<any> { 
   } 
   
   public async down(queryRunner: QueryRunner): Promise<any> { 
   } 
}

Đây,

Chúng tôi có hai phương pháp updown. up phương pháp được sử dụng để thêm các thay đổi đối với việc di chuyển và down được sử dụng để hoàn nguyên các thay đổi trong quá trình di chuyển của bạn.

Hãy để chúng tôi thêm up phương pháp bên trong myMigration.ts tệp như được chỉ định bên dưới -

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class Book1587131893261 implements MigrationInterface { 

   public async up(queryRunner: QueryRunner): Promise<any> { 
      await queryRunner.query(`ALTER TABLE book ADD COLUMN price int`); 
   }
   public async down(queryRunner: QueryRunner): Promise<any> { } 
}

Đây,

Chúng tôi đã thêm một cột mới price phía trong bookbàn. Bây giờ, thực hiện CLI để thêm các thay đổi trên.

ts-node ./node_modules/typeorm/cli.js migration:run

Lệnh trên thực hiện di chuyển và chạy chúng theo trình tự. Bây giờ, bạn có thể thấy những thay đổi dưới đây trên màn hình của mình -

Đầu ra

Bây giờ mở máy chủ mysql của bạn, cột mới được thêm vào. Nó được hiển thị bên dưới -

Tương tự, Chúng tôi có thể sửa đổi kiểu dữ liệu tiêu đề cột thành varchar (30) như sau,

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class Book1587131893261 implements MigrationInterface { 

   public async up(queryRunner: QueryRunner): Promise<any> { 
   await queryRunner.query(`ALTER TABLE book MODIFY COLUMN title varchar(30)`); 
      } 
   public async down(queryRunner: QueryRunner): Promise<any> { 
   } 
}

Bây giờ, hãy thực hiện cùng một lệnh và bạn có thể thực hiện các thay đổi bên dưới:

ts-node ./node_modules/typeorm/cli.js migration:run

Đầu ra

Book bảng được sửa đổi thành,

Hoàn nguyên di chuyển

Hãy thêm mã bên dưới vào bên trong down phương pháp hoàn nguyên di chuyển -

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class Book1587131893261 implements MigrationInterface { 
   
   public async up(queryRunner: QueryRunner): Promise<any> { 
   
   } 
   public async down(queryRunner: QueryRunner): Promise<any> { 
      await queryRunner.query(`ALTER TABLE book drop column price`); // reverts things made in "up" method 
   } 
}

Bây giờ, hãy thực hiện lệnh dưới đây để hoàn nguyên tất cả các thay đổi -

ts-node ./node_modules/typeorm/cli.js migration:revert

Bạn có thể thấy phản hồi sau:

Đầu ra

Book bảng được sửa đổi thành,

Đầu ra

Như chúng ta đã thấy trong chương này, TypeORM giúp bạn dễ dàng viết tập lệnh di chuyển cơ sở dữ liệu.