Prisma使用findUnique通过post id和prodCode查询post失败如何解决?
问题原因及解决方案
为什么原代码中findUnique无法正常运行
Prisma的findUnique方法对where参数有严格限制:必须直接在顶层传入模型的唯一标识字段(即主键或带@unique注解的字段),不能将唯一标识字段嵌套在AND/OR这类逻辑运算符内部。
你原代码中将Post的主键id放在了AND数组中,不符合findUnique的语法要求,因此无法运行。而findFirst没有该限制,支持任意组合的过滤条件,所以修改后可以正常执行。
用findUnique实现需求的正确写法
你不需要使用AND逻辑符,直接将唯一主键id放在where顶层,再叠加关联表product的筛选条件即可:
const post = await client.post.findUnique({ where: { id: postId, product: { prodCode } } });
该查询逻辑为:先按主键id定位到唯一的Post记录,再校验该记录关联的Product的prodCode是否匹配,匹配则返回对应Post,不匹配则返回null,完全符合你的查询要求。
如果你的Prisma版本较低,不支持在findUnique中直接关联筛选,可以采用先查询再校验的兼容方案:
// 先按id查Post并关联查询对应的Product const post = await client.post.findUnique({ where: { id: postId }, include: { product: true } }); // 校验prodCode是否匹配 const matchedPost = post?.product.prodCode === prodCode ? post : null;
内容的提问来源于stack exchange,提问作者broheat
相关产品推荐
相关产品推荐

