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
相关产品推荐
相关产品推荐

