Prisma findUnique()查询唯一字段email报错,求解决方案
问题分析:Prisma findUnique() 无法通过email查询的原因及解决办法
问题背景
你在Supabase部署了Postgres数据库,定义的user模型如下:
model user { created_at DateTime? @default(now()) @db.Timestamptz(6) email String @unique id BigInt @id @default(autoincrement()) }
尽管已为email字段添加@unique约束,但调用prisma.user.findUnique()按email查询时触发报错:
Error: Invalid `prisma.user.findUnique()` invocation: { where: { email: 'johndoe@gmail.com' ~~~~~ } } Unknown arg `email` in where.email for type userWhereUniqueInput. Did you mean `id`? Available args: type userWhereUniqueInput { id?: BigInt }
当前数据表为空,预期返回null却报错,改用findMany()可正常返回空数组。
问题原因
核心原因是Prisma客户端代码未同步schema的更新。你在schema中给email添加了@unique约束,但Prisma需要重新生成客户端,才能将email纳入userWhereUniqueInput的可用查询字段列表。findUnique()仅支持基于主键或唯一约束字段查询,而当前生成的客户端只识别id作为唯一查询条件,因此使用email会触发参数错误。
解决办法
- 执行以下命令重新生成Prisma客户端:
该命令会根据最新的schema定义更新客户端类型,让npx prisma generateemail成为findUnique()可接受的查询字段。 - 重新运行应用代码,此时调用
prisma.user.findUnique({ where: { email: 'johndoe@gmail.com' } })即可正常执行,数据表为空时会返回null,符合预期。
内容的提问来源于stack exchange,提问作者Neil Girardi
相关产品推荐
相关产品推荐

