Prisma upsert()方法报错:Unknown argument问题求助
问题根源
你遇到的这个错误核心原因是:你的prismaUser模型里的email字段没有被标记为唯一约束,所以Prisma生成的prismaUserWhereUniqueInput类型只认可id(因为它是@id自带唯一属性)作为唯一查询条件,不允许用email来定位要更新的记录。
Prisma的upsert方法要求where参数必须传入带有唯一约束的字段,这样它才能准确判断是要更新现有记录还是创建新记录。
解决方案
你需要在schema.prisma里给email字段加上@unique约束,让Prisma和数据库都明确这个字段是全局唯一的:
修改后的schema.prisma代码:
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model prismaUser { id Int @id @default(autoincrement()) name String @db.VarChar(255) email String @db.VarChar(255) @unique // 新增@unique约束 profileViews Int role String @db.VarChar(255) }
修改完schema后,记得重新生成Prisma客户端,执行命令:
npx prisma generate
之后你的Node.js代码不需要做任何修改,就能正常用email作为upsert的where条件了。
补充说明
- 给字段加上
@unique后,数据库层面会自动创建唯一索引,确保不会出现重复的email值; - 除了单个字段的
@unique,联合唯一约束(比如@@unique([field1, field2]))也可以作为upsert的where条件。
内容的提问来源于stack exchange,提问作者robokonk
相关产品推荐
相关产品推荐

