如何在Prisma中对名为count的字段执行orderBy排序?
问题原因
Prisma Client将count识别为聚合操作的预留关键字,直接在orderBy配置中以count为键声明排序规则时,会被判定为聚合操作参数而非字段名,因此触发参数校验错误。
可用解决方案
方案1:使用生成的标量字段枚举指定字段(推荐,无需修改现有结构)
导入Prisma客户端自带的模型字段枚举,通过动态键的方式指定排序字段,避开关键字识别逻辑:import { Prisma } from '@prisma/client' const where = // ... const limit = // ... const offset = // ... const data = await this.prisma.translation.findMany({ where, take: limit, skip: offset, orderBy: [ { [Prisma.TranslationScalarFieldEnum.count]: 'asc' } ] });方案2:使用原生查询实现排序
如果枚举方案不生效,可以直接通过$queryRaw手写SQL实现排序逻辑:const data = await this.prisma.$queryRaw` SELECT * FROM translation ORDER BY count ASC LIMIT ${limit} OFFSET ${offset} `如有复杂查询条件,可以配合
Prisma.sql模板工具拼接WHERE逻辑。方案3:修改Schema做字段映射(一劳永逸)
调整Prisma模型定义,给数据库的count字段映射一个非保留字的客户端字段名:model Translation { id String viewCount Int @map("count") @default(0) }修改后执行
prisma generate更新客户端类型,后续在代码中直接使用orderBy: { viewCount: 'asc' }即可,完全避开关键字冲突问题。
内容的提问来源于stack exchange,提问作者mrtn
相关产品推荐
相关产品推荐

