graphql_core_schema-1.0.x-dev/src/Plugin/GraphQL/SchemaExtension/ReverseEntityReference.php

src/Plugin/GraphQL/SchemaExtension/ReverseEntityReference.php
<?php

namespace Drupal\graphql_core_schema\Plugin\GraphQL\SchemaExtension;

use Drupal\Core\Entity\EntityInterface;
use Drupal\graphql\GraphQL\ResolverBuilder;
use Drupal\graphql\GraphQL\ResolverRegistryInterface;
use Drupal\graphql\Plugin\GraphQL\SchemaExtension\SdlSchemaExtensionPluginBase;
use Drupal\graphql_core_schema\CoreSchemaExtensionInterface;

/**
 * Adds a field to perform reverse entity reference queries.
 *
 * @SchemaExtension(
 *   id = "reverse_entity_reference",
 *   name = "Reverse Entity Reference",
 *   description = "Adds a field to perform reverse entity reference queries.",
 *   schema = "core_composable"
 * )
 */
class ReverseEntityReference extends SdlSchemaExtensionPluginBase implements CoreSchemaExtensionInterface {

  /**
   * {@inheritdoc}
   */
  public function getEntityTypeDependencies() {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getExtensionDependencies() {
    return ['entity_query'];
  }

  /**
   * {@inheritdoc}
   */
  public function registerResolvers(ResolverRegistryInterface $registry): void {
    $builder = new ResolverBuilder();

    $registry->addFieldResolver('Entity', 'reverseReference',
      $builder->callback(function (EntityInterface $entity) {
        return $entity;
      })
    );

    $idProducer = $builder->produce('entity_id')->map('entity', $builder->fromParent());

    $registry->addFieldResolver('ReverseReferenceContext', 'query',
      $builder->produce('reverse_entity_query')
        ->map('targetId', $idProducer)
        ->map('referenceFields', $builder->fromArgument('referenceFields'))
        ->map('entityType', $builder->fromArgument('entityType'))
        ->map('limit', $builder->fromArgument('limit'))
        ->map('offset', $builder->fromArgument('offset'))
        ->map('revisions', $builder->fromArgument('revisions'))
        ->map('sort', $builder->fromArgument('sort'))
        ->map('filter', $builder->fromArgument('filter')),
    );

    $registry->addFieldResolver('ReverseReferenceContext', 'targetId', $idProducer);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc