用于具有多个值的字段的解析器的Drupal GraphQL逻辑

问题描述 投票:0回答:1

我的第一个使用GraphQL的Drupal无头项目,我正在努力解决解析器背后的逻辑。

[具有内容类型“项目”,其字段为“ 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',

而且我不知道此解析器的外观。

reactjs graphql drupal-8 react-apollo
1个回答
0
投票

好的,我自己解决了这个问题。答案实际上很简单。

您不需要第二个解析器。只需一个带有附加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;
    })
  )
);

希望我可以帮助其他人。

© www.soinside.com 2019 - 2024. All rights reserved.