A simple loader to generate Schema for webonyx/graphql-php
Use file structure to create and design graphql schema.
- Create a folder "graphql" at your document root.
- Create a folder "Query" in "graphql" folder.
- Now you can create field for Query
use GraphQL\Loader;
use GraphQL\Type\Schema;
$loader=new Loader();
$config = SchemaConfig::create()
->setQuery($loader->queryType())
->setMutation($loader->mutationType());
$schema = new Schema($config);
Create a file hello.php in "graphql/Query" folder
graphql
+-- Query
| +-- hello.php
Query/hello.php
return [
"type"=>"String",
"resolve"=>function($root,$args,$context){
return "world!";
}
];
It equivalent to build to following schema
type Query{
hello:String
}
If you want to use custom object type, just create type file at graphql folder
graphql
+-- Query
| +-- me.php
+-- User.php
Query/me.php
return [
"type"=>"User",
"resolve"=>function($root,$args,$context){
return $context->me; //return object
}
];
User.php
return [
"fields"=>[
"first_name"=>"String",
"last_name"=>"String"
]
];
It equivalent to build to following schema
type Query{
me:User
}
type User{
first_name:String
last_name:String
}
If you want to create custom fields for custom object type, just create folder for the custom object
User has multiple phone number
graphql/User.php
return [
"fields"=>[
"first_name"=>"String",
"last_name"=>"String"
]
];
/*
no need create phone in fields,
by create file phone.php in User folder, it auto generate fields in User type
*/
create phone.php in folder "User"
graphql/User/phone.php
return [
"type"=>"[String]",
"resolve"=>function($user,$args,$context){
return $user->getPhones(); //return multi phone
}
];
graphql
+-- Query
| +-- me.php
+-- User
| +-- phone.php
+-- User.php
It equivalent to build to following schema
type Query{
me:User
}
type User{
first_name:String
last_name:String
phone:[String]
}
graphql
+-- Query
| +-- User
| +-- list.php
| +-- Invoice
| +-- list.php
+-- User.php
+-- Invoice.php
now you can query by following
query{
User{
list{
first_name
last_name
}
}
Invoice{
list{
invoice_no
}
}
}