Почему Graphql не может получить аргументы с помощью переменной, но работает при использовании статической переменной

Моя схема мутации:

mutation edit($id: Int!) {
  user_edit(id:$id) {
    user_name
  }
}

переменная запроса следует

{
  "id": 1
}

Я использую это с laravel-graphql. Вот мое определение user_edit

class UserEdit extends Mutation
{
    protected $attributes = [
        'name' => 'UserEdit',
        'description' => 'A mutation'
    ];

    public function type()
    {
        return GraphQL::type('UserInfo');
    }

    public function args()
    {
        return [
            'id' => [
                'type' => Type::int(),
            ],
        ];
    }

    public function resolve($root, $args, $context, ResolveInfo $info)
    {
        var_dump($args);exit;
        $data = User::find($args['id']);

        return $data;
    }
}

Я использую свою строку запроса для запроса сервера graphql, затем сервер возвращает мою ошибку

{
  "data": null,
  "errors": [
    {
      "message": "Variable \"$edit1\" of required type \"Int!\" was not provided.",
      "locations": [
        {
          "line": 1,
          "column": 11
        }
      ]
    }
  ]
}

Я много чего перепробовал и прочитал документ на github [https://github.com/Folkloreatelier/laravel-graphql#creating-a-mutation][1]

и прочитайте документ на веб-сайте graphql и измените мой стиль определения аргументов разными способами, но все они не увенчались успехом, и это странно. Я могу получить аргументы, но использую статическая переменная как следует

mutation edit{
      user_edit(id:1) {
        user_name
      }
    }

и тогда это сработало! Я пытался погуглить, но ничего не понял. Я думаю, мне действительно нужна помощь


person afraid.jpg    schedule 11.01.2019    source источник
comment
Пожалуйста, опубликуйте запрос, который вы делаете. Вы также можете просто попробовать сделать запрос POST вместо этого - хотя запросы GET технически поддерживаются, запросы POST используются по соглашению.   -  person Daniel Rearden    schedule 11.01.2019


Ответы (2)


Сравнивая документы с вашим кодом, кажется, что в вашем методе args вам нужно указать имя аргумента, например:

public function args()
    {
        return [
            'id' => [
                'type' => Type::int(),
                'name' => 'id'
            ],
        ];
    }

Ссылка: https://github.com/Folkloreatelier/laravel-graphql#creating-a-query

Надеюсь, это поможет!

С уважением

person masmerino    schedule 11.01.2019
comment
Я пытался, он все равно сказал мне, Variable \"$id\" of required type \"Int!\" was not provided. - person afraid.jpg; 11.01.2019
comment
Как выглядит ваш запрос? - person masmerino; 11.01.2019
comment
Я нашел причину в том, что, поскольку моя версия laravel-graphql слишком низкая, в файле readme мне было сказано установить с ~ 1.0.0, но последняя версия — v1.1.0. Тогда в моем варианте в конфиге config/graphql.php есть конфиг: 'variables_input_name' => 'params', а сейчас конфиг 'variables_input_name' => 'variables', - person afraid.jpg; 11.01.2019

Причина в более низкой версии, если вы устанавливаете версию laravel-graphql с «~ 1.0.0», перейдите к изменению config/graphql.php

// The name of the input that contain variables when you query the endpoint.
// Some library use "variables", you can change it here. "params" will stay
// the default for now but will be changed to "variables" in the next major
// release.

'variables_input_name' => 'variables', // modify here from 'params' to 'variables'
person afraid.jpg    schedule 11.01.2019