dastanaron/graphql-querybuilder

GraphQL Query Builder

dev-master 2020-03-10 11:22 UTC

This package is not auto-updated.

Last update: 2024-09-18 08:24:15 UTC


README

这是一个用于处理 GraphQL 查询的库。它允许您方便地构建查询结构、重构它,或者根据条件逐步构建。该库将继续改进,当前版本支持数组。将来,计划改进以支持对象。

安装

composer require dastanaron/graphql-querybuilder "@dev"

如果您使用 composer 的 autoload.php,请在您的 php 文件中使用它

use dastanaron\GraphQL\GQLQueryGenerator;

工作示例

类构造函数接受三个参数

$base - 指定查询的基础,通常 GraphQL 查询从这里开始

{USER(/*filters*/) {/*select*/}}

其中 User 是 $base 的指针,而 filterselect 分别是过滤和选择参数。

$filter 是一个过滤器数组,其中键是选择字符串本身,值是其值。更简单地说,看看以下示例

$filter = [
	'lang' => 'ru',
	'foo' => 'bar',
	'limit' => 10
];

这样的示例将形成这样的请求

{Users(lang: "ru", foo: "bar", limit: 10){/*select*/}}

请注意,如果您传递数字,系统不会将其括在引号中。这取决于您的 GraphQL 数据库。有时需要传递布尔值和数字,而 PHP 可以将它们转换。这个库不这样做。传递的数据类型将决定查询中形成的数据类型。请注意。如果需要将数字作为字符串传递,则必须将其作为字符串传递,即用引号括起来的值键数组

$select 是一个选择数组。直接看以下示例

$select = [
	'name',
	'age',
	'documents' =>
		[
			'passport',
			'driver_license',
			'other',
			'photo(preset: "55x55")'
		]
];

这个示例将形成这样的查询字符串

{/*Base*/(/*filter*/){name age documents{passport driver_license other photo(preset: "55x55")}}}

示例

<?php
require_once (__DIR__. './vendor/autoload.php');

use dastanaron\GraphQL\GQLQueryGenerator;

$filter = [
    'lang'  => 'ru',
    'foo'   => 'bar',
    'limit' => 10,
];

$select = [
    'name',
    'age',
    'documents' =>
        [
            'passport' => [
                'number',
                'serial',
            ],
            'driver_license' => [
                'number',
            ],
            'other',
            'photo(preset: "55x55")',
        ],
];



$graphQl = new GQLQueryGenerator('user', $filter, $select);

echo $graphQl.PHP_EOL;


echo($graphQl); //Выведет сформированный запрос

//Если нужно вернуть запрос, есть метод:
$query = $graphQl->getQuery();

echo 将输出

{user(lang: "ru", foo: "bar", limit: 10){name age documents {passport {number serial } driver_license {number } other photo(preset: "55x55") }}}

您也可以查看测试中的示例,要运行测试,请执行以下操作

composer install
php ./vendor/phpunit/phpunit/phpunit

测试示例的示例响应

 ./vendor/phpunit/phpunit/phpunit
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 21 ms, Memory: 4.00 MB

OK (2 tests, 2 assertions)