我正在尝试使用具有单独实体定义的实体来更新数据库。
未使用选项syncnize = 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
}
topic.entity.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,
},
})
答案 0 :(得分:0)
请尝试将topic.entity.ts
分别分为topic.entity.ts
和topic.schema.ts
,并仅在topic.schema.ts
上使用ormconfig.json
。
将实体部分从ormconfig.json
更改为:
“实体”:[“ src / ** / entities / *。schema.ts”]
答案 1 :(得分:0)
我为此苦苦挣扎。我所做的是分裂成 模型和架构。模型是一个普通的类。
Session.ts
export class Session {
token: string;
userId: string;
}
Session.entity.ts
和架构。 如果您忘记了目标,它会将每个实体统一到一个表中。不要忘记那个。并使用与模型相同的名称,以便正确匹配。
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}`
]
}
]
})
我希望你觉得这很有用。如果您有任何疑问,请告诉我。