Prisma中findMany查询Enum枚举类型字段的实现方法
Prisma 枚举类型查询类型匹配方案
Prisma 执行prisma generate命令时,会自动根据Schema中定义的枚举生成对应的TypeScript类型,无需手动编写自定义枚举或额外类型转换逻辑,具体用法如下:
- 首先同步生成最新的Prisma Client类型
npx prisma generate
- 从
@prisma/client包中直接导入自动生成的枚举类型 - 修正查询语法:
findMany的筛选条件必须包裹在where字段下,你提供的示例代码漏了这一层,本身就会触发语法/类型错误。
正确的查询代码示例:
import { PrismaClient, Role } from '@prisma/client' const prisma = new PrismaClient() // 示例:查询name为Rich、角色为ADMIN的用户 const whereNameIs = await prisma.user.findMany({ where: { name: 'Rich', role: Role.ADMIN // 查询普通用户传Role.USER即可 } })
常见踩坑说明
- 不要手动定义同名
Role枚举,手动编写的枚举和Prisma自动生成的类型不兼容,会直接报类型不匹配错误。 - 如果需要传入字符串格式的枚举值(比如从前端请求、环境变量拿到的
'ADMIN'/'USER'字符串),只需要先做合法值校验,再做简单类型断言即可,不需要复杂转换:
const inputRole = 'USER' // 模拟外部传入的字符串值 if (Object.values(Role).includes(inputRole as Role)) { const res = await prisma.user.findMany({ where: { name: 'Rich', role: inputRole as Role } }) }
内容的提问来源于stack exchange,提问作者Jora
相关产品推荐
相关产品推荐

