You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeORM无法删除存在ManyToOne/OneToMany关联的行问题求助

问题分析与解决方案

嘿,我一眼就揪出了问题的关键——你在删除Visit实体的时候,误用了Customer的Repository,这直接导致删除操作完全没作用在目标表上!

核心错误点

你的GraphQL解析器deleteVisitsByUuid里写了这段代码:

const repo = conn.getRepository(Customer)
const result = await repo.delete(uuid)

这段代码的实际行为是:尝试在customers表中删除uuid匹配的客户记录,而不是去操作visits表。因为你要删除的Visit的uuid在Customer表里根本找不到对应记录,所以DeleteResult.affected自然返回0,数据当然纹丝不动。

修正后的代码

只需要把Repository换成Visit的就搞定了:

@Mutation(() => Boolean)
async deleteVisitsByUuid(
  @Arg('uuid') uuid: string,
  @Ctx() { conn }: AppContext,
): Promise<boolean> {
  // 这里换成Visit的Repository!
  const repo = conn.getRepository(Visit)
  const result = await repo.delete(uuid)
  return result.affected > 0 || false
}

额外说明

你提到手动用SQL能删除Visit记录,这也验证了外键约束并没有阻碍删除——毕竟你的Customer是软删除(记录仍存在于表中),Visit的外键指向的Customer实体依然有效,所以删除Visit完全符合外键规则,不存在约束冲突的问题。之前的异常完全是Repository用错导致的,TypeORM没报错是因为它确实执行了删除Customer的操作,只是没找到匹配数据而已。

内容的提问来源于stack exchange,提问作者Andre Thiele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:27:34