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

Prisma ORM如何基于关联关系过滤查询用户已报名课程

问题根因

你使用了错误的Prisma关系过滤符,导致查询逻辑不符合预期:

  • Prisma中every的过滤规则为:当前模型关联的所有子记录全部满足指定条件时,才返回对应的父记录
  • 数理逻辑中「空集合的全称命题恒为真」,如果某门课程没有任何报名记录(enrollmentCourse是空数组),every: {userId: user.id}的条件会自动判定为成立,所以用户未报名任何课程时,也会返回没人报名的课程。
修正方案

将every替换为some关系过滤符即可,some的逻辑是只要存在至少一条关联子记录满足条件,就返回对应的父记录,完全匹配「查询用户已报名课程」的需求。

修正后的代码如下:

const result1 = await this.prisma.course.findMany({
  where: { 
    enrollmentCourse: { 
      some: { userId: user.id } 
    } 
  },
  include: { enrollmentCourse: true }
});
补充:常用一对多关系过滤符区别
  • every:全部关联记录满足条件才返回,适合查询「所有报名用户都是指定用户的课程」类场景
  • some:至少一条关联记录满足条件就返回,适合查询「存在指定用户报名的课程」类场景
  • none:没有任何关联记录满足条件才返回,适合查询「指定用户未报名的课程」类场景

内容的提问来源于stack exchange,提问作者Oliver_st

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:15:04