【发布时间】: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
}
}
}
}
这行得通!
那么,发生了什么事?我想对原始查询进行过滤,以便它也返回所有其他数据,而不仅仅是普通产品。我究竟做错了什么?感觉好像我误解了一些基本概念。
【问题讨论】:
-
错误消息指向
productsonCategorytype/class - 它可以不同于Product -
@xadm - 如果您的意思是
Category.products可能不是Product类型,那么,不 - 它是正确的类型。 -
不,两个“点”都有不同的“特征” - 您需要在
Category.product上单独的“过滤注释” - 类别解析器需要知道是否可以在该字段/关系上进行过滤 -
@xadm - Ermm...抱歉,你弄丢了我。能详细解释一下吗?
-
您需要在
Category上使用products.active过滤器 - 请参阅docs
标签: php symfony graphql api-platform.com