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

