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
相关产品推荐
相关产品推荐

