Apollo GraphQL Prisma多对多创建Pod关联Peas报错排查
问题原因
报错的核心是你给Prisma嵌套关联字段peas传入的结构不符合类型要求。
从Prisma抛出的类型定义PeaCreateNestedManyWithoutPodsInput可以看到,多对多关联的嵌套写入字段需要传一个对象,通过create/connect/connectOrCreate这类键指定要执行的关联操作,对应的值才是要处理的记录列表。你当前的写法是把每个待关联记录都单独包了一层{connect: {email: xxx}}组成数组,相当于给peas传了List<{connect: ...}>类型的值,和Prisma预期的结构完全不匹配。
修复步骤
1. 修改resolver代码
调整peas字段的构造逻辑,把connect操作提到外层,直接将所有待关联Pea的查询条件数组传给connect;同时添加include配置确保关联的Pea数据能随新建的Pod一起返回,修正后的代码如下:
addPod: async (parent, args, context) => { return context.prisma.pod.create({ data: { name: args.name, description: args.description, image: args.image, peas: { connect: args.peas.map(email => ({ email })) } }, include: { peas: true } }) }
2. 前置检查(必做)
确认你的schema.prisma中满足以下两个条件,否则connect操作会报错:
Pea模型的email字段添加了@unique装饰器,只有标记为唯一的字段才能作为connect的匹配依据Pea和Pod两个模型配置了正确的隐式多对多关联,参考配置片段:
model Pea { id Int @id @default(autoincrement()) email String @unique fullName String pods Pod[] } model Pod { id Int @id @default(autoincrement()) name String description String? image String? peas Pea[] }
3. 无需修改的部分
你现有的GraphQL Mutation定义、Apollo Explorer中传入的变量格式都是正确的,不需要调整。
结构对比说明
两种写法的差异可以直接对比看:
- 错误写法(你当前的实现):
peas: [ { connect: { email: 'rach@test.com' } }, { connect: { email: 'benji@test.com' } } ]
- 正确写法:
peas: { connect: [ { email: 'rach@test.com' }, { email: 'benji@test.com' } ] }
内容的提问来源于stack exchange,提问作者JSim
相关产品推荐
相关产品推荐

