dastanaron / graphql-querybuilder
GraphQL Query Builder
dev-master
2020-03-10 11:22 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- phpunit/phpunit: ^8.5
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
的指针,而 filter
和 select
分别是过滤和选择参数。
$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)