【问题标题】:How to filter GraphQL on subobject with Symfony and API Platform?如何使用 Symfony 和 API 平台过滤子对象上的 GraphQL?
【发布时间】:2019-09-30 08:09:06
【问题描述】:

虽然我是一位经验丰富的开发人员,但我对 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
                }
              }
            }
          }
        }
      }
    }
  }
}

Buuuut,我明白了:

{
  "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
      }
    }
  }
}

这行得通!

那么,发生了什么事?我想对原始查询进行过滤,以便它也返回所有其他数据,而不仅仅是普通产品。我究竟做错了什么?感觉好像我误解了一些基本概念。

【问题讨论】:

  • 错误消息指向products on Category type/class - 它可以不同于Product
  • @xadm - 如果您的意思是 Category.products 可能不是 Product 类型,那么,不 - 它是正确的类型。
  • 不,两个“点”都有不同的“特征” - 您需要在 Category.product 上单独的“过滤注释” - 类别解析器需要知道是否可以在该字段/关系上进行过滤
  • @xadm - Ermm...抱歉,你弄丢了我。能详细解释一下吗?
  • 您需要在Category 上使用products.active 过滤器 - 请参阅docs

标签: php symfony graphql api-platform.com


【解决方案1】:

我认为这是一个有害的错误,已在 master 和 2.4 分支中解决(尚未发布)。 详情请见https://github.com/api-platform/core/pull/2970

【讨论】:

    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 2021-09-18
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2020-11-30
    相关资源
    最近更新 更多