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

如何向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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:55:09