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

调用Prisma delete()报错:TodoWhereUniqueInput需至少一个参数

解决Prisma delete() 报错:Argument where of type TodoWhereUniqueInput needs at least one argument

问题核心原因

你在代码里用了Schema中的原始字段名Todo_ID作为where条件,但Prisma生成的TypeScript客户端会自动把Schema里的大小写混合/蛇形命名字段转换为驼峰式命名(比如Todo_ID会被转成todoId)。当传入客户端无法识别的字段名时,Prisma会判定where参数没有提供有效的唯一标识条件,因此抛出错误。

另外要明确:delete()方法要求必须通过唯一标识字段(@id或@unique修饰的字段)定位单条记录,而deleteMany()支持任意条件删除多条记录,这也是后者能正常运行的原因——它不强制唯一条件,但返回的是删除条数而非单条记录对象。

解决方案

修改delete()调用中的字段名为Prisma客户端生成的驼峰式名称:

export async function DeleteTodo(todo_Id: number): Promise<Todo | null> {
  try {
    // 将 Todo_ID 改为 todoId
    const result = await prisma.todo.delete({
      where: {
        todoId: todo_Id,
      }
    });
    return result; // delete成功时必然返回删除的对象,无需额外判断
  } catch (err: any) {
    console.log(err);
  }
  return null;
}

验证字段名的方法

如果不确定客户端生成的字段名,可以查看node_modules/.prisma/client/index.d.ts文件,找到Todo模型的定义,其中的ID字段名就是你需要使用的正确名称。

额外说明

  • delete():仅支持通过唯一标识删除单条记录,返回被删除的完整数据对象。
  • deleteMany():支持任意条件批量删除,返回{ count: number }表示删除的记录条数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15