You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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及数据库驱动等依赖版本

解决办法

  1. 重新生成Prisma Client
    这是最常见的原因,Prisma Client未与最新Schema同步。执行:

    npx prisma generate
    

    修改Schema后必须执行此命令,确保Client代码和Schema一致。

  2. 验证Prisma Client实例导入
    确认API路由中导入的prisma是正确初始化的实例,路径无误:

    import { prisma } from '@/lib/prisma'; // 替换为你的实际路径
    
  3. 清理缓存并重启服务
    开发环境缓存可能导致旧代码残留,执行:

    rm -rf .next node_modules/.cache
    

    然后重启Next.js开发服务器。

  4. 检查数据库迁移状态
    确保数据库已应用最新迁移,执行:

    npx prisma migrate deploy
    

    验证数据库中Quiz表结构与Schema定义一致。

  5. 检查模型名称拼写
    Prisma Client中模型名是驼峰式(quiz对应Schema的Quiz),确认代码中未写错成prisma.Quiz.create这类错误写法。

内容的提问来源于stack exchange,提问作者VLDR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:35:56