ratehub/doctrine-graphql

GraphQL Doctrine ORM 桥接器

dev-master 2020-05-29 19:03 UTC

This package is not auto-updated.

Last update: 2024-09-24 22:56:51 UTC


README

Build Status Total Downloads Latest Stable Version License

使用 Doctrine 模型元数据生成所有必要的类型、查询和突变器。所有标准数据获取都使用 doctrine Array Hydrator。在所有查询完成且数据准备好返回时,此提供程序将处理对象的水化。

特性

白名单/黑名单

提供程序可以配置为筛选最终 GraphQL API 中包含的对象和属性。

  • 白名单仅包括标记为包含的类型/属性
  • 黑名单仅包括标记为不排除的类型/属性

授权

可以实现授权提供程序以通过凭据级别权限限制对类型和字段的访问

命名覆盖

可以通过 GraphQLType 和 GraphQLProperty 注解覆盖类型和方法的名字和描述。字段名尚不能被覆盖。

延迟加载

通过 DeferredBuffer 利用关联的延迟加载。这可以显著减少查询数量并解决加载数据时的 N+1 问题(https://secure.phabricator.com/book/phabcontrib/article/n_plus_one/

自定义解析器

任何属性都可以有自己的自定义解析器,而不是提供程序提供的标准解析器。

分页

提供程序支持顶级查询的关键和偏移量分页。还支持限制 n 到多关系返回的结果。

排序

查询结果可以根据一个或多个字段按升序或降序排序。

类型查询过滤器

核心类型如字符串、日期时间、整数和 BigInt 支持以下过滤器

等于、在、小于、大于、小于等于、大于等于、介于

多态实体

提供程序支持使用 GraphQL inline fragments 查询多态实体和查询每个类型的唯一字段。

入门指南

初始化 doctrine 后,您需要注册 GraphQL 注解

use RateHub\GraphQL\Doctrine\AnnotationLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;
 
AnnotationRegistry::registerLoader(array(new AnnotationLoader(), "load"));

下一步是初始化 GraphQL 模式

use RateHub\GraphQL\Doctrine\DoctrineProvider;
use RateHub\GraphQL\Doctrine\DoctrineProviderOptions;
use RateHub\GraphQL\GraphContext;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Schema;

// Set the options including any extensions
$options = new DoctrineProviderOptions();
$options->em = $em; // EntityManager initialized within your as app as needed
$options->filter = 'blacklist'

// Initialize the Provider. With blacklist filtering, no
// annotations are needed unless something needs to be 
// excluded. The provider will generate all queries, 
// mutators and types needed.
$provider = new DoctrineProvider('default', $options);

// Initialize top level types
$context = new GraphContext();
$queryType = new ObjectType('query', $provider->getQueries());
$mutatorType = new ObjectType('mutator', $provider->getMutators());

// Initialize the schema
$schema = new Schema([
                      'query' => $queryType,
                      'mutation' => $mutatorType,
                      'types' => $provider->getTypes()
                    ]);

从这里您可以执行查询

   $result = \GraphQL\GraphQL::execute(
       $schema,
       $params['query'], // Request parameter containing the graphql query
       null,
       $context,
       null
   );