如何在反应中为 graphql 创建对象数组

How to create object array in react for graphql

Graphql 架构:

type SDKConfig @model 
  @key(name: "byPublisher", fields: ["publisher_id", "id"]){
  id: ID!
  publisher_id: ID!
  facebook_app_id: String

  adjust_app_token: String
}

type GameConfig @model
  @auth(rules: [
    {allow: owner},
    {allow: groups, groupsField: "groups"}]){
  id: ID!
  game_name: String!
  bundle_identifier: String!

  sdkConfigs: [SDKConfig] @connection(keyName: "byPublisher", fields: ["id"])
  groups: [String]
}

突变:

export const createGameConfig = /* GraphQL */ `
  mutation CreateGameConfig(
    $input: CreateGameConfigInput!
    $condition: ModelGameConfigConditionInput
  ) {
    createGameConfig(input: $input, condition: $condition) {
      id
      game_name
      bundle_identifier
      sdkConfigs {
        items {
          id
          publisher_id
          facebook_app_id
          adjust_app_token
          createdAt
          updatedAt
        }
        nextToken
      }
      groups
      createdAt
      updatedAt
      owner
    }
  }
`;

反应函数:

    async function createGame() {
      try {
        const newgame = { 
            "game_name": "deneme",
            "bundle_identifier": "com.magiclab.deneme",
            sdkConfigs: [
                {   "publisher_id": 5,
                    "facebook_app_id": "fb12313",
                    "adjust_app_token": "adjusttoken123123",
                }
            ] 
        }
        await API.graphql(graphqlOperation(createGameConfig, {input: newgame}))
      } catch (err) {
        console.log('error creating game sdk config:', err)
      }
    }

错误信息:

"The variables input contains a field name 'sdkConfigs' that is not defined for input object type 'CreateGameConfigInput' "

我想在对象中创建一个对象数组。如何修复 graphql 的输入对象?

你应该 运行 两种不同的突变,一种用于创建 GameConfig,另一种用于创建 SDKConfig 它将是这样的

async function createGame() {
  try {
    const newgame = {
      game_name: 'deneme',
      bundle_identifier: 'com.magiclab.deneme',
    };
    const sdk = {
      publisher_id: null,
      facebook_app_id: 'fb12313',
      adjust_app_token: 'adjusttoken123123',
    };
    const {
      data: {
        createGameConfig: { id: publisher_id },
      },
    } = await API.graphql(
      graphqlOperation(createGameConfig, { input: newgame })
    );
    sdk.publisher_id = publisher_id;
    await API.graphql(graphqlOperation(createSDKConfig, { input: sdk }));
  } catch (err) {
    console.log('error creating game sdk config:', err);
  }
}

然后你将使用第一个突变的 id return 作为第二个突变的输入,这个标识符将绑定这两个条目,当你查询任何 gameConfig 时,它会拉入一个数组任何 SDKConfig他们的 publisher_id 与 gameConfig 匹配。

您可以在官方文档的这一部分扩展这些信息 https://docs.amplify.aws/cli/graphql-transformer/directives#belongs-to