具有单独实体定义的迁移



我正在尝试使用具有单独实体定义的实体来更新我的数据库。

数据库既没有用synchronize=true选项更新,也没有用以下命令更新:

ts-node ./node_modules/typeorm/cli.js migration:generate -n CreateDatabase

其生成空的迁移文件。

我忘了什么?

复制步骤或显示问题的小型存储库:

ormconfig.json

{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "secret",
"database": "app",
"entities": ["src/**/entities/*.entity.ts"],
"migrations": ["src/database/migrations/*.ts"],
"cli": {
"migrationsDir": "src/database/migrations"
},
"synchronize": true
}

主题实体.ts

export class Topic {
title: string
}
topic.schema.ts
import { EntitySchema, EntitySchemaColumnOptions } from 'typeorm'
import { Topic} from '../topic.entity'
export const TopicSchema = new EntitySchema<Topic>({
name: 'topics',
target: Topic,
columns: {
title: {
name: 'title',
type: 'text',
nullable: true,
} as EntitySchemaColumnOptions,
},
})

尝试将topic.entity.ts拆分为topic.entity.tstopic.schema.ts,并在ormconfig.json上仅使用topic.schema.ts

将实体部分从ormconfig.json更改为:

"实体":["src/**/entities/*.schema.ts"]

我一直在努力解决这个问题。我所做的就是分裂成模型和模式。模型是一个常见的类。

会话.ts

export class Session {
token: string;
userId: string;
}

会话实体.ts

和Schema如果您忘记了目标,它会将每个实体统一到一个表中。别忘了。并使用与模型相同的名称,以便正确匹配

import {EntitySchema} from "typeorm";
import { Session } from "../models/Session";
export const SessionEntity = new EntitySchema<Session>({
name: "Session", // BE CAREFUL: must be the same name as Model, STRING
target: Session, // This must be the Class itself, NOT STRING
columns: {
token: {
type: String,
primary: true,
generated: "uuid"
},
userId: {
type: String
}
}
});

使用

import { SessionEntity } from "../entities/Session.entity";
const connection = this.typeORMService.get("default");
const repository = this.ormService.connection.getRepository(SessionEntity);
const session = await repository.save({userId: "123"});

您可能遇到的另一个问题是,如果您在代码和ormconfig.json中添加设置,它将使用代码设置。所以也要小心

我更喜欢在这样的代码中设置设置:

const rootDir = __dirname;
@Configuration({
rootDir,
typeorm: [
{
name: "default",
synchronize: true,
type: "postgres",
url: process.env.DATABASE_URL || config.DATABASE_URL,
ssl: process.env.DATABASE_URL ? true : false,  // If env var is not set then it is dev
"entities": [ 
`${rootDir}/**/*.entity.js`,
`${rootDir}/**/*.entity.{ts,js}`
],
"migrations": [`${rootDir}/migrations/**/*.js`],
subscribers: [
`${rootDir}/subscriber/*.js}`
]
}
]
})

我希望你觉得这个有用。如果你有任何疑问,请告诉我。

最新更新