Getting Started
Installation
bash
npm install typeorm-fluent-migratorNote: This library requires typeorm as a peer dependency:
bash
npm install typeormBasic Usage
Create a Table
typescript
import { MigrationInterface, QueryRunner } from 'typeorm';
import { FL } from 'typeorm-fluent-migrator';
export class CreateUsersTable1623456789000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner)
.create.table('users')
.column('id').int.primary.autoIncrement
.column('name').varchar(255).notNull
.column('email').varchar(255).unique.notNull
.column('age').int.nullable.execute();
}
async down(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner).drop.table('users');
}
}Alter a Table
typescript
export class AddPhoneColumn1623456790000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner)
.alter.table('users')
.addColumn('phone').varchar(20).nullable
.dropColumn('oldStatus')
.alterColumn('name').varchar(100).notNull.execute();
}
async down(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner)
.alter.table('users')
.dropColumn('phone')
.addColumn('oldStatus').varchar(50).nullable
.alterColumn('name').varchar(255).notNull.execute();
}
}Foreign Keys
typescript
export class CreatePostsTable1623456791000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner)
.create.table('posts')
.column('id').int.primary.autoIncrement
.column('title').varchar(100).notNull
.column('content').text.nullable
.column('authorId').int.notNull.references('users', 'id').onDelete('CASCADE').onUpdate('RESTRICT')
.execute();
}
async down(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner).drop.table('posts');
}
}Indexes
typescript
export class CreateIndexes1623456792000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner).create.index('idx_users_email').on('users').column('email').unique.execute();
await FL.use(queryRunner)
.create.index('idx_posts_author_status')
.on('posts')
.columns('authorId', 'status')
.execute();
}
async down(queryRunner: QueryRunner): Promise<void> {
await FL.use(queryRunner).drop.index('users', 'idx_users_email');
await FL.use(queryRunner).drop.index('posts', 'idx_posts_author_status');
}
}Next Steps
- Check out the API Reference to see all available column types and constraints
- Browse Examples for more use cases
- See Comparison to understand the differences from native TypeORM