Wallogit.com
2017 © Pedro Peláez
GraphQL Query Builder
Библиотека для работы с GraphQL запросами. Позволяет удобно составлять структуру запросов, рефракторить ее, или собирать постепенно в зависимости от условий. Данная библиотека будет улучшаться, данная версия работает с массивами. В дальнейшем, планируется доработать, ее для работы с объектами., (*1)
composer require dastanaron/graphql-querybuilder "@dev", (*2)
Используйте в своем php файле, если вы используете autoload.php из composer, (*3)
use dastanaron\GraphQL\GQLQueryGenerator;
$base - указатель базы запроса, с нее обычно начинается запрос GraphQL,, (*4)
{USER(/*filters*/) {/*select*/}}
Где User - это и есть указатель $base, а filter и select - это
соответственно параметры для фильтрации и выборки., (*5)
$filter - это массив фильтров, где ключом является сама строка выборки,
а значением - его значение. Проще на примере:, (*6)
$filter = [
'lang' => 'ru',
'foo' => 'bar',
'limit' => 10
];
Такой пример сформирует такой запрос:, (*7)
{Users(lang: "ru", foo: "bar", limit: 10){/*select*/}}
Обратите внимание, что если вы передаете число, система не оборачивает его в кавычки. Это зависит от вашей GraphQL базы. Иногда нужно передавать и булевы значения и числа, а php их может преобразовывать. Данная библиотека этого не делает. Какого типа данные будут переданы, такого типа данные и сформируются в запросе. Будьте внимательны. Если нужно передать число как строку, то передавайте его строкой, т.е. завернутой в кавычки при передачи значения ключа массива, (*8)
$select - это массив выборок. Сразу к примеру:, (*9)
$select = [
'name',
'age',
'documents' =>
[
'passport',
'driver_license',
'other',
'photo(preset: "55x55")'
]
];
Данный пример сформирует такую строку запроса:, (*10)
{/*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 выведет:, (*11)
{user(lang: "ru", foo: "bar", limit: 10){name age documents {passport {number serial } driver_license {number } other photo(preset: "55x55") }}}
Вы так же можете посмотреть примеры в тестах, для запуска тестов нужно сделать следующее, (*12)
composer install php ./vendor/phpunit/phpunit/phpunit
Примерный ответ тестов:, (*13)
./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)