Prisma多表关联查询TypeScript类型错误排查求助
Prisma多表关联查询TypeScript类型错误排查
问题核心
TypeScript提示discord_messages不存在于qa2Select类型,本质是Prisma客户端的类型定义里,qa2模型和discord_messages模型的关联关系未正确配置,导致TS无法识别该关联字段。
排查与解决步骤
检查Prisma Schema的关联定义
确保qa2模型中已通过@relation字段关联到discord_messages,且关联名称和查询中使用的discord_messages完全一致(大小写敏感)。示例Schema:model qa2 { id Int @id @default(autoincrement()) question String answer String no_answer Int is_relevant Int message_id Int? // 正向关联:qa2通过message_id关联到discord_messages的id discord_messages discord_messages? @relation(fields: [message_id], references: [id]) } model discord_messages { id Int @id @default(autoincrement()) channel_id Int guild_id Int // 反向关联(可选,不影响查询但能完善双向关联) qa2 qa2[] // 确保discord_messages本身也正确关联到channels和guilds discord_channels discord_channels @relation(fields: [channel_id], references: [id]) discord_guilds discord_guilds @relation(fields: [guild_id], references: [id]) }重新生成Prisma客户端
修改Schema后必须执行以下命令更新TS类型定义:npx prisma generate旧的客户端类型不会自动更新,这是最容易忽略的点。
校验自定义类型
Qa2WithRelations
如果你手动定义了这个类型,要确保它包含discord_messages字段,且结构与Prisma生成的类型匹配。推荐直接用Prisma内置的类型生成工具避免手写错误:type Qa2WithRelations = Prisma.qa2GetPayload<{ include: { discord_messages: { include: { discord_channels: true, discord_guilds: true } } } }>测试查询写法
若关联配置正确,可先改用include替代select快速验证(include会返回关联模型的所有字段,适合排查):const qa2Data = await db.qa2.findMany({ where: { no_answer: 0, is_relevant: 1, }, include: { discord_messages: { include: { discord_channels: { select: { name: true } }, discord_guilds: { select: { name: true } } } } }, });
内容的提问来源于stack exchange,提问作者randombits
相关产品推荐
相关产品推荐

