Graphql Создание 2 записей с 1 мутацией

Я не сталкивался с этим раньше, но просто 1 мутация создаст 2 записи:

scheme.json:

    {
      "name": "createAdminConfigCategory",
      "description": "Creates a single `AdminConfigCategory`.",
      "args": [
        {
          "name": "input",
          "description": "The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.",
          "type": {
            "kind": "NON_NULL",
            "name": null,
            "ofType": {
              "kind": "INPUT_OBJECT",
              "name": "CreateAdminConfigCategoryInput",
              "ofType": null
            }
          },
          "defaultValue": null
        }
      ],
      "type": {
        "kind": "OBJECT",
        "name": "CreateAdminConfigCategoryPayload",
        "ofType": null
      },
      "isDeprecated": false,
      "deprecationReason": null
    },
    {
      "kind": "INPUT_OBJECT",
      "name": "CreateAdminConfigCategoryInput",
      "description": "All input for the create `AdminConfigCategory` mutation.",
      "fields": null,
      "inputFields": [
        {
          "name": "clientMutationId",
          "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.",
          "type": {
            "kind": "SCALAR",
            "name": "String",
            "ofType": null
          },
          "defaultValue": null
        },
        {
          "name": "adminConfigCategory",
          "description": "The `AdminConfigCategory` to be created by this mutation.",
          "type": {
            "kind": "NON_NULL",
            "name": null,
            "ofType": {
              "kind": "INPUT_OBJECT",
              "name": "AdminConfigCategoryInput",
              "ofType": null
            }
          },
          "defaultValue": null
        }
      ],
      "interfaces": null,
      "enumValues": null,
      "possibleTypes": null
    },
    {
      "kind": "OBJECT",
      "name": "CreateAdminConfigCategoryPayload",
      "description": "The output of our create `AdminConfigCategory` mutation.",
      "fields": [
        {
          "name": "clientMutationId",
          "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.",
          "args": [],
          "type": {
            "kind": "SCALAR",
            "name": "String",
            "ofType": null
          },
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "adminConfigCategory",
          "description": "The `AdminConfigCategory` that was created by this mutation.",
          "args": [],
          "type": {
            "kind": "OBJECT",
            "name": "AdminConfigCategory",
            "ofType": null
          },
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "query",
          "description": "Our root query field type. Allows us to run any query from our mutation payload.",
          "args": [],
          "type": {
            "kind": "OBJECT",
            "name": "Query",
            "ofType": null
          },
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "adminConfigCategoryEdge",
          "description": "An edge for our `AdminConfigCategory`. May be used by Relay 1.",
          "args": [
            {
              "name": "orderBy",
              "description": "The method to use when ordering `AdminConfigCategory`.",
              "type": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "ENUM",
                    "name": "AdminConfigCategoriesOrderBy",
                    "ofType": null
                  }
                }
              },
              "defaultValue": "[PRIMARY_KEY_ASC]"
            }
          ],
          "type": {
            "kind": "OBJECT",
            "name": "AdminConfigCategoriesEdge",
            "ofType": null
          },
          "isDeprecated": false,
          "deprecationReason": null
        }
      ],
      "inputFields": null,
      "interfaces": [],
      "enumValues": null,
      "possibleTypes": null
    },

Данные до мутации:

{
  "data": {
    "allAdminConfigCategories": {
      "edges": []
    }
  }
}

Мутация:

  mutation something($name: String!) {
    createAdminConfigCategory(input: { adminConfigCategory: { name: $name } }) {
      query {
        allAdminConfigCategories {
          edges {
            node {
              id
            }
          }
        }
      }
    }
  }

переменные

{ "name": "Jamie" }

Данные после мутации:

{
  "data": {
    "createAdminConfigCategory": {
      "query": {
        "allAdminConfigCategories": {
          "edges": [
            {
              "node": {
                "id": 42
              }
            },
            {
              "node": {
                "id": 43
              }
            }
          ]
        }
      }
    }
  }
}

Я выполняю эти запросы в graphiql:

1 ответ

Решение

Вы не создаете две записи здесь; ваша мутация:

mutation something($name: String!) {
  createAdminConfigCategory(input: { adminConfigCategory: { name: $name } }) {
    query { # < Here's the issue
      allAdminConfigCategories {
        edges {
          node {
            id
          }
        }
      }
    }
  }
}

запрашивает query поле с полезной нагрузкой мутации, которое снова дает вам доступ ко всей схеме GraphQL. Затем вы используете это для запроса allAdminConfigCategories которая предоставит вам все категории конфигурации администратора, которые вы можете видеть (не только ту, которую вы только что создали).

Мутация, которую вы хотите, вероятно, больше похожа на это:

mutation something($name: String!) {
  createAdminConfigCategory(input: { adminConfigCategory: { name: $name } }) {
    adminConfigCategory {
      id
    }
  }
}

Здесь мы просто запрашиваем вновь созданную AdminConfigCategory непосредственно из полезной нагрузки мутации.

Другие вопросы по тегам