【发布时间】:2022-08-22 02:06:50
【问题描述】:
我有两个实体与它们之间的多对一关系:
实体:
- 个人资料
- 语言
它们的关系定义为:
import BaseModel from \"@models/BaseModel\";
import { Entity, ManyToOne } from \"typeorm\";
import Language from \"@models/Language\";
@Entity()
export default class ProfessionalProfile extends BaseModel {
@ManyToOne(() => Language, { nullable: false })
language: Language;
}
因此,在我的测试设置中,我在 beforeEach 中创建了一些实例,并尝试在 afterEach 中清理数据库。那是我的 afterEach 代码:
import PersonalProfileRepository from \"@repositories/PrefessionalProfileRepository\";
import AppTestsDataSource from \"@tests/config/database/data-sources\";
import Language from \"@models/Language\";
const { manager: entityManager } = AppTestsDataSource;
afterEach(async () => {
await PersonalProfileRepository.clear();
await entityManager.clear(Language);
});
由于我首先删除了所有 PersonalProfile 实例,因此我假设我也能够清除 Language 表。但我收到此错误:
QueryFailedError: Cannot truncate a table referenced in a foreign key constraint (`hey_freela_test`.`professional_profile`, CONSTRAINT `FK_b785f751abc8ecd343bbae0f324`)
at Query.onResult (src/driver/mysql/MysqlQueryRunner.ts:222:33)
at Query.execute (node_modules/mysql2/lib/commands/command.js:36:14)
at PoolConnection.handlePacket (node_modules/mysql2/lib/connection.js:456:32)
at PacketParser.onPacket (node_modules/mysql2/lib/connection.js:85:12)
at PacketParser.executeStart (node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (node_modules/mysql2/lib/connection.js:92:25)
我在这里做错了什么?在这种情况下清理我的数据库的正确方法是什么?