adeey / graphql-php
GraphQL PHP 库
1.0.46
2024-05-10 17:21 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ^9.6
README
此库可以从 PHP 数组构建一个可用的查询/突变字符串
安装
composer require adeey/graphql-php
类
<?php require 'vendor/autoload.php'; use MaxGraphQL\Types\Query; // For Query use MaxGraphQL\Types\Mutation; // For Mutation
使用步骤
使用步骤
-
使用突变/查询名称创建新的类对象
$mutation = new Mutation('name');
-
添加您想要选择的内容
$mutation->addSelect(['test', 'name']);
2.1 或者您可以传递一个字段名称
$mutation->addSelect('name'); $mutation->addSelect('test'); $mutation->getSelect(); // ['name', 'test']
-
向您的查询添加参数(过滤器)
$mutation->addArguments(['test' => 123]);
-
获取构建的查询
$mutation->getPreparedQuery();
-
在您的请求中使用该字符串
或者
您可以通过调用静态方法构建字符串
// $arguments is optional Mutation::getPreparedQueryFrom('nameOfYourMutation', $selected, $arguments); Query::getPreparedQueryFrom('nameOfYourQuery', $selected, $arguments);
这两种方法都将返回字符串
方法
可以从中调用的方法
- 返回当前所选字段
$object->getSelect()
- 返回当前参数
$object->getArguments()
参数/选择在哪里?
query { HEREYOURNAME( argument: "ITS MY ARGUMENT" ) { HERE SELECT } }
示例 PHP 代码
$query = new Query('HEREYOURNAME'); $arguments = [ 'argument' => 'ITS MY ARGUMENT' ]; $select = [ 'HERE SELECT' ]; $query->addSelect($select); $query->addArguments($arguments); $query->getPreparedQuery(); // and here ours query
如何构建这样的查询?这很简单
query { users( format: ALL, filter: { activeUsers: true, userIds: [1,2] } ) { id name code password channels { id titles { id } } ... on UserAdmin { userAdminLevel } } }
PHP 代码
use MaxGraphQL\FieldTypes\Enum; $whatIWantToSelect = [ 'id', 'name', 'code', 'password', 'channels' => [ 'id', 'titles' => [ 'id' ] ], '... on UserAdmin' => [ 'userAdminLevel' ] ]; $filteringArguments = [ 'format' => new Enum('ALL'), // if you want write enum values you need to use Enum class 'filter' => [ 'activeUsers' => true, 'userIds' => [1,2] ] ]; $query = new Query('users'); $query->addSelect($whatIWantToSelect); $query->addArguments($filteringArguments); echo $query->getPreparedQuery(); // returns query string
PHP 代码的结果是查询字符串,它与我的 GraphQL 查询相等,并且是从 PHP 数组生成的
query{users(format:ALL,filter:{activeUsers:true,userIds:[1,2]}){id,name,code,password,channels{id,titles{id}},... on UserAdmin{userAdminLevel}}}
如何构建这样的突变?
mutation { updateUser( id: "321", data: { name: "Test", age: 32, admin: false } ) { id name code password channels { id titles { id } } ... on UserAdmin { userAdminLevel } } }
PHP 代码
$whatIWantToSelect = [ 'id', 'name', 'code', 'password', 'channels' => [ 'id', 'titles' => [ 'id' ] ], '... on UserAdmin' => [ 'userAdminLevel' ] ]; $mutationArguments = [ 'id' => '321', // look that id is in string format 'data' => [ 'name' => 'Test', 'age' => 32, // and the age is int 'admin' => false ] ]; $mutation = new Mutation('updateUser'); // updateUser - name of mutation $mutation->addSelect($whatIWantToSelect); $mutation->addArguments($mutationArguments); echo $mutation->getPreparedQuery(); // returns mutation string
突变字符串结果
mutation{updateUser(id:"321",data:{name:"Test",age:32,admin:false}){id,name,code,password,channels{id,titles{id}},... on UserAdmin{userAdminLevel}}}
其他案例
有时我们想在查询中添加额外的过滤器,如下所示
query { users { all(pageSize: 25) { name ... } } }
我们需要这样写
$whatWeNeedToSelect = [ 'all(pageSize: 25)' => [ 'name', ... ] ];