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)