如何向Prisma数组字段中插入多个复合对象?
Prisma数组字段插入多个复合对象报错解决思路
问题描述
需要通过编程向Prisma模型的数组字段插入多个复合对象,当前代码片段如下:
const newDevice = await this.prismaService.deviceModel.create({ data: { modelNumber: device.modelNumber, parts: { set: device.parts } } })
其中device.parts是包含{partNumber: string, quantity: number, partName: string}结构对象的数组。
执行后报错:
+ partNumber: String, + quantity: Int, + partName: String } } }) Unknown arg `set` in data.parts.set for type DevicePartsCreateInput. Did you mean `select`? Argument partNumber for data.parts.partNumber is missing. Argument quantity for data.parts.quantity is missing. Argument partName for data.parts.partName is missing. Note: Lines with + are required
手动插入单个对象可成功执行,已尝试以下方法但无效:
- 重新生成Prisma客户端:
npx prisma generate - 转换数组格式:
set: device.parts.map(s => ({partNumber: s.partNumber, quantity: s.quantity, partName: s.partName})) - 用
CreateMany替代set
解决思路
核心问题
错误提示明确DevicePartsCreateInput类型不支持set参数——因为你定义的parts是嵌入式复合类型数组,而非数据库关联关系,所以不能用set或CreateMany这类针对关联数据的操作语法。
正确写法
对于嵌入式复合类型数组,直接将数组赋值给字段即可,无需嵌套额外操作:
const newDevice = await this.prismaService.deviceModel.create({ data: { modelNumber: device.modelNumber, parts: device.parts // 直接传入复合对象数组 } })
验证Schema定义
确保你的Prisma Schema中deviceModel的parts字段定义符合嵌入式复合类型数组要求,示例如下:
model DeviceModel { id Int @id @default(autoincrement()) modelNumber String parts DeviceParts[] // 复合类型数组字段 } type DeviceParts { partNumber String quantity Int partName String }
若Schema定义正确,直接传入数组即可完成批量复合对象插入。
内容的提问来源于stack exchange,提问作者Lizzie
相关产品推荐
相关产品推荐

