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

如何在Prisma Schema中存储自定义对象?Setup模型适配方案

你当前的Setup模型中contract字段定义为String[](字符串数组),但你试图存入的是包含id、name、text的对象,类型不匹配导致写入失败,同时写入代码里的personal字段在模型中不存在,也需要移除。以下是两种可行的解决方案:

解决方案1:使用Json类型(通用方案,支持多数数据库)

修改Setup模型中的contract字段类型为Json(存储单个对象)或Json[](存储对象数组),根据你的需求选择:

model Setup {
  id String @id @default(auto()) @map("_id") @db.ObjectId

  userId String? @unique @db.ObjectId
  user   User?   @relation(fields: [userId], references: [id])

  contract Json? // 存储单个对象,可选字段
  // 若需存储多个对象,改为:contract Json[]
  legal    String[]

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

修改后运行命令更新数据库结构:

# 开发环境执行
prisma migrate dev
# 测试环境可直接推送变更
prisma db push

调整写入代码,移除不存在的personal字段:

prisma.setup.create({
    data: {
      userId: '6399bc74426f71f2da6e316c',
      contract: contractData, // 若存数组则传 [contractData]
      legal: []
    }
  })
解决方案2:使用嵌入式模型(仅MongoDB适用)

如果你的数据库是MongoDB,可定义嵌入式类型获得更严格的代码层面类型校验:

先定义Contract嵌入式类型:

type Contract {
  id String
  name String
  text String
}

再修改Setup模型:

model Setup {
  id String @id @default(auto()) @map("_id") @db.ObjectId

  userId String? @unique @db.ObjectId
  user   User?   @relation(fields: [userId], references: [id])

  contract Contract? // 存储单个嵌入式对象
  // 若需存储多个对象,改为:contract Contract[]
  legal    String[]

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

同样运行prisma migrate dev或prisma db push更新数据库,写入代码与方案1一致,Prisma会自动提供类型提示避免错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:45:33