GraphQL创建项目Mutation报错:ProjectInput未定义parts字段
报错原因与解决方法:Field 'parts' is not defined by type 'ProjectInput'
报错原因
这个错误逻辑非常明确:你在Mutation的createProject输入参数里传递了parts字段,但你的ProjectInput类型定义中根本没有声明这个字段。GraphQL是强类型查询语言,输入结构必须严格匹配定义的Input类型,因此直接抛出了校验错误。
另外你的查询变量里还有个隐性问题:phones字段定义的是[ID](数组类型),但你传的是单个值28,这也会触发类型不匹配的错误,后续需要一并修正。
解决方法
根据你的业务场景(Project关联Phone,Phone关联多个Parts),分两种处理方案:
方案1:业务需要Project直接关联Parts
如果你的需求是让Project同时关联Phone和独立的Parts,首先需要修改ProjectInput类型,添加parts字段:
type ProjectInput { title: String phones: [ID] parts: [ID] # 新增parts字段,匹配传递的数组类型 }
同时修正查询变量的phones为数组类型,确保和定义一致:
{ "title": "test", "phones": [28], # 改为数组 "parts": [2, 6] }
最后要确保后端的createProjectResolver逻辑已经实现了parts字段的关联处理,否则会出现关联失败的情况。
方案2:Project仅关联Phone,Parts通过Phone间接关联
如果你的需求是Project只需要关联Phone,而Phone本身已经关联好Parts(查询时能通过Phone拿到Parts),那完全不需要在创建Project时传递parts字段,直接移除相关代码即可:
修改后的Mutation:
mutation createProject( $title: String $phones: [ID] ) { createProject( data: { title: $title phones: $phones } ) { data { id attributes { title phones { data { id attributes { name parts { data { id } } } } } } } } }
修正后的查询变量:
{ "title": "test", "phones": [28] # 改为数组匹配类型定义 }
内容的提问来源于stack exchange,提问作者FD3
相关产品推荐
相关产品推荐

