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
相关产品推荐
相关产品推荐

