可选关联字段引发Prisma Studio查询异常问题求助
解决Prisma Studio创建Notification记录时的关联字段查询错误
问题描述
我在构建应用通知系统时,定义了如下Prisma的Notification模型,包含两个可选关联字段question_reference和answer_reference(二者必选其一):
model Notification { id Int @id @default(autoincrement()) for User @relation(fields: [userId], references: [id]) read Boolean @default(false) question_reference Question? @relation(fields: [questionId], references: [id]) answer_reference Answer? @relation(fields: [answerId], references: [id]) userId Int questionId Int? answerId Int? }
在Prisma Studio中尝试创建通知记录时触发错误,查看日志发现Studio生成了无效的findMany查询——本该放在include中的关联字段被错误放到了select里:
{ "modelName": "Notification", "operation": "findMany", "args": { "take": 100, "skip": 0, "select": { "id": true, "for": true, "read": true, "question_reference": true, "answer_reference": true, "userId": true, "questionId": true, "answerId": true } } }
已尝试升级Prisma到v4.10版本、执行prisma migrate dev(提示无schema变更或待处理迁移),但问题仍未解决。
复现步骤
- 提前创建User和Question模型,在Prisma Studio中创建Notification模型
- 点击“Add Record”,填入已创建的User和Question记录作为外键值
- 触发上述错误
解决方案
- 重新生成Prisma客户端
执行命令重新生成客户端,确保schema的关联定义被正确解析:
prisma generate
- 清理Prisma Studio缓存
关闭Prisma Studio后,删除本地缓存目录,再重启Studio:
rm -rf .prisma/studio prisma studio
- 通过脚本手动创建记录
如果Studio的问题暂时无法解决,可直接用Prisma客户端脚本绕过:
const { PrismaClient } = require('@prisma/client') const prisma = new PrismaClient() async function createNotification() { const notification = await prisma.notification.create({ data: { userId: 1, // 替换为实际用户ID questionId: 1, // 替换为实际问题ID read: false }, include: { question_reference: true, for: true } }) console.log(notification) } createNotification() .catch(e => console.error(e)) .finally(async () => await prisma.$disconnect())
- 降级Prisma版本
如果v4.10存在Studio的bug,可尝试降级到稳定版本(比如v4.9.0):
npm install prisma@4.9.0 prisma generate
内容的提问来源于stack exchange,提问作者coderman1234
相关产品推荐
相关产品推荐

