具有多个值的字段的 Resolver 的 Drupal GraphQL 逻辑
Drupal GraphQL logic for Resolver for a field with multiple values
我的第一个使用 GraphQL 的 Drupal 无头项目,我正在努力解决解析器背后的逻辑。
内容类型 "project" 的字段 "field_project_description"。该字段可以存储多个值。
这是我的架构的一部分:
type Project {
id: Int!
project_title: String!
project_description: [ProjectDescription]
}
type ProjectDescription {
value: String
}
这是相应解析器的一部分的样子:
$registry->addFieldResolver('ProjectDescription', 'value',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_project_project_desc.value'))
);
但据我所知,必须有另一个解析器,例如
$registry->addFieldResolver('Project', 'project_description',
而且我不知道这个解析器应该是什么样子。
好的,我自己解决了这个问题。其实答案很简单。
您不需要第二个解析器。只需一个带有附加 PHP 函数的解析器,即可将数组展平为字符串就足够了。这就是代码现在的样子。
架构:
type Project {
id: Int!
project_title: String!
project_description: [String]
}
解析器:
$registry->addFieldResolver('Project', 'project_description',
$builder->compose(
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_project_project_desc')),
$builder->callback(function ($entity) {
$list = [];
foreach($entity as $item){
array_push($list, $item['value']);
}
return $list;
})
)
);
我希望我可以帮助其他人。
我的第一个使用 GraphQL 的 Drupal 无头项目,我正在努力解决解析器背后的逻辑。
内容类型 "project" 的字段 "field_project_description"。该字段可以存储多个值。
这是我的架构的一部分:
type Project {
id: Int!
project_title: String!
project_description: [ProjectDescription]
}
type ProjectDescription {
value: String
}
这是相应解析器的一部分的样子:
$registry->addFieldResolver('ProjectDescription', 'value',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_project_project_desc.value'))
);
但据我所知,必须有另一个解析器,例如
$registry->addFieldResolver('Project', 'project_description',
而且我不知道这个解析器应该是什么样子。
好的,我自己解决了这个问题。其实答案很简单。
您不需要第二个解析器。只需一个带有附加 PHP 函数的解析器,即可将数组展平为字符串就足够了。这就是代码现在的样子。
架构:
type Project {
id: Int!
project_title: String!
project_description: [String]
}
解析器:
$registry->addFieldResolver('Project', 'project_description',
$builder->compose(
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_project_project_desc')),
$builder->callback(function ($entity) {
$list = [];
foreach($entity as $item){
array_push($list, $item['value']);
}
return $list;
})
)
);
我希望我可以帮助其他人。