Создание файла миграции для проекта с использованием NestJS и TypeORM

#typescript #nestjs #typeorm

#typescript #nestjs #typeorm

Вопрос:

Я пытаюсь сгенерировать файлы миграции для своих объектов, но всякий раз, когда я запускаю команду для создания объекта, создается «пустой» файл, создаются только методы up и down.

Я добавил этот скрипт в свой файл package.json: "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js" .

В моем app.module.ts соединение настроено следующим образом:

  TypeOrmModule.forRoot({
      type: 'mysql',
      host: database().host,
      port: parseInt(database().port),
      username: database().username,
      password: database().password,
      database: database().schema,
      entities: [Question, QuestionOption],
      migrations: ['src/migration/*{.ts,.js}'],
      cli: {
        migrationsDir: 'src/migration'
      },
      synchronize: true,
    })
  

Где database() это конфигурационный файл nestjs и получить значения из файла .env.

Сценарий, который я использую для создания миграции, таков: npm run typeorm migration:create -- -n QuestionTables -d src/migrations где необходимо указать -d, в противном случае файл миграции не создается (даже если он указан в командной строке метода forRoot.

Нужно ли мне вручную писать SQL для создания таблиц?

Что, если мне нужно добавить новый столбец в существующую таблицу, должен ли я создать новый файл миграции и вручную написать SQL-код для его добавления?

Другой командой, которую я пытался запустить, была эта: npm run typeorm migration:generate -- -n QuestionTables -d src/migrations и здесь она выдает мне ошибку: » Ошибка: ни в каких файлах конфигурации orm не найдено параметров подключения».

Комментарии:

1. Не могли бы вы, чтобы ваши миграции создавали таблицы в схеме, отличной от общедоступной?

Ответ №1:

Команда npm run typeorm migration:create сгенерирует пустой файл миграции.

Команда для автоматической генерации миграций является: npm run typeorm migration:generate

Как написано в полученной вами ошибке, вам необходимо указать файл конфигурации для командной строки. Затем следует извлечь конфигурацию, переданную forRoot , в файл ts / json. Для этого вам понадобятся 2 файла: 1 для подключения к серверу и еще один для конфигурации миграции.

Например:

 // ormconfig.ts
export const config: TypeOrmModuleOptions = {
      type: 'mysql',
      host: database().host,
      port: parseInt(database().port),
      username: database().username,
      password: database().password,
      database: database().schema,
      entities: [Question, QuestionOption], // maybe you should also consider chage it to something like:  [__dirname   '/**/*.entity.ts', __dirname   '/src/**/*.entity.js']
      migrations: ['src/migration/*{.ts,.js}'],
      cli: {
        migrationsDir: 'src/migration'
      },
      synchronize: true,
    }

  
 // ormconfig-migrations.ts

import {config} from './ormconfig';

export = config;

  
 import {config} from './ormconfig';

TypeOrmModule.forRoot(config);
  
 // package.json

"scripts": {
     ...
     "typeorm:cli": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli -f ./ormconfig-migrations.ts",
     "migration-generate": "npm run typeorm:cli -- migration:generate -n"
}
  

Комментарии:

1. Хорошо, итак, теперь, если я запускаю команду npm run migration-generate Test, он говорит, что никаких изменений в схеме базы данных обнаружено не было — невозможно сгенерировать миграцию. Нужно ли мне создавать миграцию и вручную кодировать SQL внутри нее, чтобы создать таблицу?

2. Вы уже создали какие-либо таблицы? Если это так, то очистите схему, удалите таблицы или удалите схему и создайте ее заново, а затем запустите migration-generate. Эта ошибка говорит о том, что в вашей базе данных уже есть таблицы, соответствующие объектам в вашем проекте.

3. Пока нет, моя база данных пуста.

4. У вас есть какие-либо миграции в таблице миграций?

5. Я удалил все из базы данных, там есть только база данных без каких-либо таблиц. Если я запускаю npm run migration-generate, я получаю сообщение о том, что никаких изменений в схеме базы данных обнаружено не было. Если я запускаю migration-create, он создает файл в папке миграции, но с пустым методом up и down. Должен ли он создавать файл миграции с некоторым кодом SQL или мне нужно написать этот код SQL?