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

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客户端:
    npx prisma generate
    
    该命令会根据最新的schema定义更新客户端类型,让email成为findUnique()可接受的查询字段。
  • 重新运行应用代码,此时调用prisma.user.findUnique({ where: { email: 'johndoe@gmail.com' } })即可正常执行,数据表为空时会返回null,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:40:28