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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:07