【问题标题】:How can I clear tables with ManyToOne relationship using TypeORM如何使用 TypeORM 清除具有多对一关系的表
【发布时间】: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)

我在这里做错了什么?在这种情况下清理我的数据库的正确方法是什么?

    标签: node.js jestjs typeorm


    【解决方案1】:

    在 ManyToOne 关系中,添加 onDelete: 'CASCADE'

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2015-07-15
      • 2013-01-16
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多