Vai al contenuto principale

Generazione

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

TypeORM può generare automaticamente file di migrazione confrontando le modifiche apportate alle entità con lo schema del database esistente sul server.

La generazione automatica delle migrazioni crea un nuovo file e inserisce tutte le query SQL necessarie per aggiornare il database. Se non vengono rilevate modifiche, il comando terminerà con codice 1.

Supponiamo di avere un'entità Post con una colonna title, e di aver cambiato il nome title in name.

Puoi generare la migrazione con il seguente comando:

typeorm migration:generate -d <path/to/datasource> <migration-name>

Il valore dell'argomento -d deve specificare il percorso in cui è definita la tua istanza DataSource.

In alternativa puoi specificare un nome con il parametro --name

typeorm migration:generate -- -d <path/to/datasource> --name=<migration-name>

oppure usare un percorso completo:

typeorm migration:generate -d <path/to/datasource> <path/to/migrations>/<migration-name>

Supponendo di aver usato post-refactoring come nome, verrà generato un nuovo file chiamato {TIMESTAMP}-post-refactoring.ts con questo contenuto:

import { MigrationInterface, QueryRunner } from "typeorm"

export class PostRefactoringTIMESTAMP implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`,
)
}

async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`,
)
}
}

In alternativa, puoi generare le migrazioni come file Javascript usando il flag o (abbreviazione di --outputJs). Utile per progetti solo Javascript senza pacchetti TypeScript aggiuntivi. Questo comando genererà un nuovo file {TIMESTAMP}-PostRefactoring.js con questo contenuto:

/**
* @typedef {import('typeorm').MigrationInterface} MigrationInterface
* @typedef {import('typeorm').QueryRunner} QueryRunner
*/

/**
* @class
* @implements {MigrationInterface}
*/
module.exports = class PostRefactoringTIMESTAMP {
/**
* @param {QueryRunner} queryRunner
*/
async up(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`,
)
}

/**
* @param {QueryRunner} queryRunner
*/
async down(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`,
)
}
}

Per impostazione predefinita, genera codice Javascript CommonJS con il flag o (abbreviazione di --outputJs), ma puoi generare codice ESM con il flag esm. Utile per progetti Javascript che usano ESM:

/**
* @typedef {import('typeorm').MigrationInterface} MigrationInterface
* @typedef {import('typeorm').QueryRunner} QueryRunner
*/

/**
* @class
* @implements {MigrationInterface}
*/
export class PostRefactoringTIMESTAMP {
/**
* @param {QueryRunner} queryRunner
*/
async up(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`,
)
}

/**
* @param {QueryRunner} queryRunner
*/
async down(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`,
)
}
}

Come vedi, non devi scrivere manualmente le query.

La regola d'oro è generare le migrazioni dopo ogni modifica ai tuoi modelli. Per applicare la formattazione multilinea alle query generate, usa il flag p (abbreviazione di --pretty).