#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?