Как отфильтровать GraphQL по подобъекту с помощью Symfony и API Platform? - PullRequest
0 голосов
/ 13 мая 2019

Хотя я опытный разработчик, я довольно новичок в Symfony / API Platfrom / GraphQL. Моя задача проста - добавить к сущности Product фильтр, который позволяет отфильтровывать только активные продукты. Бонусные баллы, если фильтр установлен по умолчанию, то есть по умолчанию возвращаются только активные продукты, и вам нужно добавить параметр, если вы хотите видеть неактивные продукты. Но если это слишком сложно, просто добавьте фильтр.

ОК, поэтому в моем Product.php у меня есть (показаны только соответствующие части):

use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;

/**
 * @ApiFilter(BooleanFilter::class, properties={"active" : "exact"})
 */
class Product {
    /**
     * @ORM\Column(type="boolean")
     */
    private $active;
}

Затем я пытаюсь изменить существующий запрос, чтобы отфильтровать только активные продукты:

{
  sellers(id: 5, active: true) {
    edges {
      node {
        categories {
          edges {
            node {
              products (active: true) {
                totalCount
                edges {
                  node {
                    name
                }
              }
            }
          }
        }
      }
    }
  }
}

Буууут, я получаю:

{
  "errors": [
    {
      "message": "Unknown argument \"active\" on field \"products\" of type \"Category\".",
      "category": "graphql",
      "locations": [
        {
          "line": 39,
          "column": 25
        }
      ]
    }
  ]
}

Теперь, если я изменю это на запрос продуктов:

{
  products (active: true) {
    totalCount
    edges {
      node {
        name
      }
    }
  }
}

Это работает!

Итак, что происходит? Я хотел бы сделать фильтр для исходного запроса, чтобы он также возвращал все остальные данные, а не только простые продукты. Что я делаю неправильно? Такое ощущение, что я неправильно понимаю фундаментальную концепцию.

...