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

Prisma dayEvent.create()报id空约束错误,已设默认值仍异常

Prisma创建dayEvent时触发Null约束错误问题

执行prisma.dayEvent.create()时触发以下错误:

Invalid `prisma.dayEvent.create()` invocation:

Null constraint violation on the fields: (`id`)

问题详情

  • dayEvent模型的id字段已配置@id @default(cuid()),但创建操作仍提示id字段空约束违规
  • 同Schema中的Calendar模型使用完全相同的id配置,可正常创建数据
  • 手动传入id值时,dayEvent的创建操作可正常执行,但不希望在TRPC中手动生成id
  • 使用完整T3栈,已执行npx prisma db push确保数据库与Schema同步,仍未解决

Prisma Schema代码

model Calendar {
  id           String      @id @default(cuid())
  calendarName String
  dayEvents    dayEvent[]
  hostId       String

  host User @relation(fields: [hostId], references: [id])
}

model dayEvent {
  id         String   @id @default(cuid())
  name       String
  date       DateTime
  calendarId String

  calendar   Calendar @relation(fields: [calendarId], references: [id])
}

触发错误的TRPC代码

create: protectedProcedure
    .input(
      z.object({ name: z.string(), date: z.date(), calendarId: z.string() })
    )
    .mutation(async ({ ctx, input }) => {
      return ctx.prisma.dayEvent.create({ // 错误发生在此处
        data: {
          name: input.name,
          date: input.date,
          calendarId: input.calendarId,
        },
      })
    }),

可能的解决方案

  • 检查数据库表结构:直接查看数据库中dayEvent表的id字段是否存在默认值配置。如果prisma db push未同步成功,可手动执行SQL语句为id字段添加CUID默认值,或改用npx prisma migrate dev执行迁移(若使用迁移流程)。
  • 重新生成Prisma Client:执行npx prisma generate重新生成客户端代码,确保Schema的变更被正确应用到Prisma Client中。
  • 调整模型命名:将dayEvent模型名改为首字母大写的DayEvent,Prisma对模型命名的规范可能影响数据库映射,避免潜在的大小写匹配问题。
  • 验证Prisma实例:确认TRPC上下文中的ctx.prisma是正确初始化的最新实例,不存在版本不一致或被篡改的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:52:43