使用NestJS和TypeORM为项目生成迁移文件

19

我正在尝试为我的实体生成迁移文件,但是每当我运行创建实体的命令时,它只创建一个“空”的文件,只有 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方法的cli中指定了也不会创建迁移文件。

我需要手动编写SQL来创建表吗?

如果我需要向现有表添加新列,是否应该创建一个新的迁移文件并手动编写SQL代码来添加列?

我尝试运行的另一个命令是:npm run typeorm migration:generate -- -n QuestionTables -d src/migrations,但它给我一个错误:"Error: No connection options were found in any orm configuration files."


你能让迁移生成的表位于public以外的模式吗? - killjoy
1个回答

29

命令npm run typeorm migration:create将生成空的迁移文件。

用于自动生成迁移的命令是:npm run typeorm migration:generate

如您所收到的错误信息所述,您需要为cli指定配置文件。这意味着应该将传递给forRoot的配置提取到一个ts/json文件中。您需要两个文件,一个用于服务器连接,另一个用于迁移配置。

例如:

// 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"
}

好的,现在如果我运行命令npm run migration-generate Test,它会说找不到数据库模式中的任何更改 - 无法生成迁移。 我需要创建一个迁移并手动编写其中的SQL代码来创建表格吗? - Maturano
你已经创建了任何表格吗?如果是这样,请清除架构,删除表格或删除架构并重新创建它,然后运行迁移生成。这个错误表示你的数据库已经有与项目实体匹配的表格。 - noam steiner
还没有,我的数据库是空的。 - Maturano
synchronize:true”不会打破整个目的吗?每当您启动此连接时,它将始终使用DB架构同步实体,因此没有要生成的迁移。 - thisismydesign
不需要添加 npm run - Renato Junior
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接