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

如何在Prisma中删除含或不含子记录的IssueGroup?

解决方案:删除IssueGroup时同步删除关联Issue(GraphQL+Apollo+Prisma)

1. 修改Prisma Schema实现级联删除

由于你的Issue表中issueGroupId是必填字段(非nullable),SetNull会违反字段约束导致VS Code警告,正确做法是使用onDelete: Cascade,删除IssueGroup时会自动删除所有关联的Issue。

更新后的Prisma Schema示例:

model IssueGroup {
  id     Int      @id @default(autoincrement())
  name   String
  issues Issue[]  // 一对多关联:一个IssueGroup对应多个Issue
}

model Issue {
  id           Int         @id @default(autoincrement())
  title        String
  issueGroupId Int         // 必填关联字段,不可为null
  issueGroup   IssueGroup  @relation(
    fields: [issueGroupId], 
    references: [id], 
    onDelete: Cascade  // 核心配置:级联删除关联Issue
  )
}

修改完成后执行数据库迁移:

npx prisma migrate dev

2. 修复「要删除的记录不存在」错误

该错误通常因传入的IssueGroup ID无效(不存在或格式错误)导致,可在Apollo resolver中捕获Prisma特定错误码,返回清晰提示:

// Apollo Server resolver 示例
const deleteIssueGroup = async (_, { id }, { prisma }) => {
  try {
    // 执行删除操作,可选include关联Issue用于返回结果
    const deletedGroup = await prisma.issueGroup.delete({
      where: { id: parseInt(id) },
      include: { issues: true }
    });
    return deletedGroup;
  } catch (error) {
    // Prisma的P2025错误码对应「记录不存在」
    if (error.code === 'P2025') {
      throw new Error('要删除的IssueGroup不存在');
    }
    // 抛出其他未知错误
    throw error;
  }
};

3. 验证操作

  • 测试删除包含Issue的IssueGroup,检查数据库中关联Issue是否被同步删除
  • 测试传入无效ID,确认返回的错误提示准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:35:25