如何完全改变数组中的对象列表作为 GraphQL 中的参数

How to mutate a list of objects in an array as an argument in GraphQL completely

我无法完全改变对象列表,因为只有数组的最后一个元素会被改变。

如果我像这里一样手动将每个元素 ({play_positions_id: ...}) 放入数组中,那么已经很完美了:

mutation CreateProfile {
  __typename
  create_profiles_item(data: {status: "draft", play_positions: [{play_positions_id: {id: "1"}}, {play_positions_id: {id: "2"}}]}) {
    id
    status
    play_positions {
     
      play_positions_id {
        abbreviation
        name
      }
    }
  }
}

输出:

{
  "data": {
    "__typename": "Mutation",
    "create_profiles_item": {
      "id": "1337",
      "status": "draft",
      "play_positions": [
        {
          "play_positions_id": {
            "id": "1",
            "abbreviation": "RWB",
            "name": "Right Wingback"
          }
        },
        {
         "play_positions_id": {
            "id": "2",
            "abbreviation": "CAM",
            "name": "Central Attacking Midfielder"
          }
        }
      ],
    }
  }
}

因为你可以添加很多这样的元素,所以我定义了一个 variable/argument 就像这里

mutation CreateProfile2($cpppi: [create_profiles_play_positions_input]) {
  __typename
  create_profiles_item(data: {status: "draft", play_positions: $cpppi}) {
    id
    status
    play_positions {
      
      play_positions_id {
        id
        abbreviation
        name
      }
    }
  }
}

上面的可变对象:

"cpppi": {    
    "play_positions_id": {
      "id": "1"
    },
    "play_positions_id": {
      "id": "2
    }
  }

输出:

{
  "data": {
    "__typename": "Mutation",
    "create_profiles_item": {
      "id": "1338",
      "play_positions": [
        {
        
          "play_positions_id": {
            "id": "2",
            "abbreviation": "CAM",
            "name": "Central Attacking Midfielder"
          }
        }
      ],
    }
  }
}

架构:

input create_profiles_input {
  id: ID
  status: String!
  play_positions: [create_profiles_play_positions_input]
}

input create_profiles_play_positions_input {
  id: ID
  play_positions_id: create_play_positions_input
}

input create_play_positions_input {
      id: ID 
      abbreviation: String
      name: String
}

在最后两个片段中,只有 ID 为“2”的最后一个对象会发生变化。我需要这些来使用后端定义的输入类型。

我明白了。我弄错了变量中的括号。解决方法在这里:

"cpppi": [
    {
      "play_positions_id": {
        "id": "1"
      }
    },
    {
      "play_positions_id": {
        "id": "2"
      }
    }
  ]