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

GraphQL传递对象数组作为变量时出错,如何修复?

修复GraphQL Mutation传递对象数组变量的类型错误

问题原因

错误信息直接点明了两个核心问题:

  • 后端定义的ArrInput输入类型不存在val2这个嵌套对象字段
  • 后端要求必须传递val2_id字段且不能为空,说明后端期望直接传关联ID,而非嵌套对象
  • 你的代码遗漏了mutation中声明的必填变量$id,这也会导致执行错误

修复步骤

1. 调整数组格式适配后端输入类型

把数组中每个对象的val2.id提取出来,转换成后端要求的val2_id字段:

result.data.forEach(d => {
  // 转换arr的结构,匹配ArrInput类型要求
  const transformedArr = d.arr.map(item => ({
    val1: item.val1,
    val2_id: item.val2.id // 直接传递ID值,替代嵌套的val2对象
  }));

  const variables = {
    id: d.id, // 补上mutation要求的必填ID变量(根据实际业务来源调整)
    label: d.label,
    arr: transformedArr
  };

  axiosFunc({ query, variables })
    .then(response => console.log('创建成功:', response.data))
    .catch(err => console.error('请求失败:', err));
});

2. 确认后端ArrInput定义(建议操作)

如果对后端输入类型存疑,可以通过GraphQL Playground或自省查询确认ArrInput的结构,正确的定义应该类似:

input ArrInput {
  val1: String!
  val2_id: ID! # 必填的关联ID字段
}

3. 补充必填的$id变量

你的mutation中明确声明$id: ID!是必填参数,之前的代码未传递该变量,必须补上对应的值(比如从循环项d或其他业务逻辑中获取)。

关键说明

错误提示里的val2_id (Expected value to not be null)是核心线索:后端需要的是一个名为val2_id的ID类型字段,而非你当前传递的嵌套val2对象。只要把数据结构转换成后端期望的格式,同时补上遗漏的必填变量,就能解决这个错误。

内容的提问来源于stack exchange,提问作者nb_nb_nb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:43:13