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

Prisma创建School关联SubjectPool时school_id参数报错求助

问题:Prisma创建关联数据时出现school_id参数错误

定义的Prisma模型

model School {
  id         Int           @id @default(autoincrement())
  name       String?
  center_no  Int?
  type       String?
  subjects   SubjectPool[]
}
model SubjectPool {
  id   Int     @id @default(autoincrement())
  name String?
  code String?

  school    School?         @relation(fields: [school_id], references: [id])
  school_id Int?
}

初始化数据库的Seed代码

await prisma.school.create({
        data: {
            ...school,
            subjects: {
                create: [ math, english, geography]
            }
        },
        include: {
            subjects: true
        }
    })

报错信息

await prisma.school.create({
       data: {
         id: 1,
         name: 'kansenshi secondary school',
         center_no: 2783783,
         type: 'gov',
         province: 'copperbelt',
         district: 'Ndola',
         subjects: {
           create: [
             null,
             {
               id: 3,
               name: 'English',
               code: '234',
               school_id: null,
               ~~~~~~~~~
               class_id: null
             },
             null
           ]
         }
       },
       include: {
         subjects: true
       }
     })

Unknown arg `school_id` in data.subjects.create.1.school_id for type SubjectPoolUncheckedCreateWithoutSchoolInput. Did you mean `class_id`? Available args:     
type SubjectPoolUncheckedCreateWithoutSchoolInput {
  id?: Int
  name?: String | Null
  code?: String | Null
  class_id?: Int | Null
  schedule?: ClassScheduleUncheckedCreateNestedManyWithoutSubjectInput
}

解决方案

  1. 移除SubjectPool数据中的school_id字段
    在通过School.subjects.create创建关联的SubjectPool时,Prisma会自动处理外键关联,无需手动传入school_id。当前报错是因为该场景下Prisma使用的输入类型不允许指定关联外键字段。

  2. 清理旧模型残留并更新Prisma客户端
    错误信息中出现了未在当前模型定义的class_id和ClassSchedule字段,说明Prisma客户端可能未同步最新模型。执行以下命令:

    • 重新生成客户端:npx prisma generate
    • 同步数据库结构:npx prisma db push(开发环境)或npx prisma migrate dev
    • 重新执行seed:npx prisma db seed
  3. 过滤seed数据中的null值
    报错的seed数据中存在null元素,会触发无效的创建操作,建议过滤掉空值:

    await prisma.school.create({
        data: {
            ...school,
            subjects: {
                create: [math, english, geography].filter(Boolean)
            }
        },
        include: {
            subjects: true
        }
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:50:24