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

