Prisma使用findUnique过滤复合唯一索引中null值DateTime字段报错
问题原因
Prisma 4.6.0以下版本存在已知限制:当复合唯一索引包含可为空的字段时,findUnique方法不支持直接给nullable字段传null作为查询条件。你模型里的deletedAt是可选字段,旧版本Prisma生成复合唯一键的查询类型时,错误地将其推导为非空DateTime类型,所以传入null会触发类型校验报错。
解决方案
有两种可行的修复方式:
- 方式一:升级Prisma到4.6.0及以上版本,该版本官方修复了nullable复合唯一键的null查询支持,升级后你原有的查询写法可以直接正常运行。
- 方式二:如果暂时无法升级版本,改用
findFirst方法替代findUnique,写法如下:
const account = await this.prisma.user.findFirst({ where: { email: 'user@exemple.com', deletedAt: null } });
由于你已经设置了email + deletedAt的复合唯一键,findFirst的查询结果和findUnique完全一致,最多只会返回一条匹配记录,不会影响结果准确性和查询性能。
内容的提问来源于stack exchange,提问作者Anthony Collin-Nadeau
相关产品推荐
相关产品推荐

