Next.js中Prisma创建Quiz模型报错:Operation 'createOne'匹配失败求助
在Next.js中使用Prisma创建Quiz记录时遇到"createOne不匹配查询"错误
执行prisma.quiz.create时持续报错:
Operation 'createOne' for model 'Quiz' does not match any query.
代码情况
API路由中的POST方法代码:
export const POST = async (req: Request, res: Response) => { try { // ... (身份验证和数据解析逻辑) // 尝试创建新的'Quiz'记录 const quiz = await prisma.quiz.create({ data: { userId: session.user.id, timeStarted: new Date(), topic, }, }); // ... (创建关联记录的额外逻辑) return NextResponse.json({ quizId: quiz.id }); } catch (error) { if (error instanceof ZodError) { return NextResponse.json({ error: error.issues }, { status: 400 }); } else { // 日志记录用途 console.log('api/questions error: ', error); return NextResponse.json( { error: 'Something went wrong' }, { status: 500 } ); } } };
Prisma Schema定义
Quiz和Question模型的Schema:
model Quiz { id String @id @default(cuid()) userId String timeStarted DateTime topic String timeEnded DateTime? user User @relation(fields: [userId], references: [id], onDelete: Cascade) questions Question[] @@index([userId], name: "userId") } model Question { id String @id @default(cuid()) question String answer String quizId String options Json isCorrect Boolean? userAnswer String? quiz Quiz @relation(fields: [quizId], references: [id], onDelete: Cascade) @@index([quizId], name: "quizId") }
Prisma Client初始化代码
import { PrismaClient } from '@prisma/client'; import 'server-only'; declare global { // eslint-disable-next-line no-var, no-unused-vars var cachedPrisma: PrismaClient; } export let prisma: PrismaClient; if (process.env.NODE_ENV === 'production') { prisma = new PrismaClient(); } else { if (!global.cachedPrisma) { global.cachedPrisma = new PrismaClient({ log: ['query', 'info', 'warn', 'error'], errorFormat: 'pretty', }); } prisma = global.cachedPrisma; }
已尝试的排查步骤
- 确认Quiz模型Schema字段定义正确
- 验证传入
prisma.quiz.create的字段数据类型匹配 - 更新了Prisma及数据库驱动等依赖版本
解决办法
重新生成Prisma Client
这是最常见的原因,Prisma Client未与最新Schema同步。执行:npx prisma generate修改Schema后必须执行此命令,确保Client代码和Schema一致。
验证Prisma Client实例导入
确认API路由中导入的prisma是正确初始化的实例,路径无误:import { prisma } from '@/lib/prisma'; // 替换为你的实际路径清理缓存并重启服务
开发环境缓存可能导致旧代码残留,执行:rm -rf .next node_modules/.cache然后重启Next.js开发服务器。
检查数据库迁移状态
确保数据库已应用最新迁移,执行:npx prisma migrate deploy验证数据库中Quiz表结构与Schema定义一致。
检查模型名称拼写
Prisma Client中模型名是驼峰式(quiz对应Schema的Quiz),确认代码中未写错成prisma.Quiz.create这类错误写法。
内容的提问来源于stack exchange,提问作者VLDR
相关产品推荐
相关产品推荐

