Prisma findMany结合where与include时patientId过滤失效问题求助
解决Prisma查询中patientId过滤不生效的问题
以下是几个可行的排查和解决方向:
确认参数传递是否正确
在findByPatient方法开头添加日志,打印传入的patientId值:async findByPatient(patientId: string, page: number = 1, perPage: number = 2) { console.log('传入的patientId:', patientId); // 新增日志 // 原有代码 }检查接口调用时是否真的传对了参数,比如有没有传空值、或者参数类型和数据库字段不匹配(比如数据库是UUID类型,但传入的是无效字符串)。
核对Prisma Schema定义
检查Transmission模型的字段定义:- 确认
patientId字段的拼写、类型和Patient模型的id完全一致,比如都是String或UUID类型; - 确认关联关系是否正确配置,比如:
要是model Transmission { id String @id @default(uuid()) patientId String isDraft Boolean @default(true) createdAt DateTime @default(now()) patient Patient @relation(fields: [patientId], references: [id]) constants Constant[] // 假设你的Constant模型关联正确 }patientId和关联的Patient.id类型不匹配,或者关联定义有误,会导致过滤失效。
- 确认
查看Prisma生成的实际SQL
开启Prisma的查询日志,确认生成的SQL是否包含patientId的过滤条件:
在Prisma Client初始化时添加日志配置:import { PrismaClient } from '@prisma/client'; export const prisma = new PrismaClient({ log: ['query'], // 只打印查询SQL });调用接口后看控制台输出的SQL,要是
WHERE子句里没有patient_id = ?的条件,说明Prisma没有正确解析你的过滤规则,这时候可以尝试显式指定字段类型或者换过滤方式。改用关联实体过滤
如果直接用patientId过滤无效,试试通过关联的patient实体来过滤:async findByPatient(patientId: string, page: number = 1, perPage: number = 2) { const transmissions = await this.prisma.transmission.findMany({ where: { isDraft: false, patient: { id: patientId // 通过关联的Patient.id过滤 } }, include: { patient: true, constants: true, }, orderBy: { createdAt: 'desc', }, take: perPage, skip: (page - 1) * perPage, }); return transmissions; }直接在数据库验证数据
手动在PostgreSQL执行SQL查询,确认是否存在符合条件的数据:SELECT * FROM "Transmission" WHERE "patientId" = '你的测试patientId' AND "isDraft" = false;要是数据库里根本没有对应的数据,那过滤自然不会返回结果,这时候要检查数据录入是否正确。
内容的提问来源于stack exchange,提问作者prout
相关产品推荐
相关产品推荐

