The objective of this project is to facilitate the integration of the webonyx/graphql-php with the Laravel Framework
Use composer to install this package
composer require supliu/laravel-graphql
Execute a publish with artisan command:
php artisan vendor:publish --provider="Supliu\LaravelGraphQL\ServiceProvider"
You must create your Query and Mutation classes and register on config/graphql.php
so that GraphQL can read.
'queries' => [
'detailHero' => \App\GraphQL\Queries\DetailHero::class
],
'mutations' => [
'updateHero' => \App\GraphQL\Mutations\UpdateHero::class
]
Below is an example of a Query class that returns the data of a Star Wars hero:
<?php
namespace App\GraphQL\Queries;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use Supliu\LaravelGraphQL\Query;
class DetailHero extends Query
{
/**
* @return array
*/
protected function args(): array
{
return [
'id' => Type::nonNull(Type::int())
];
}
/**
* @return Type
*/
protected function typeResult(): Type
{
return new ObjectType([
'name' => 'HeroQueryResult',
'fields' => [
'name' => Type::string()
]
]);
}
/**
* @return mixed
*/
protected function resolve($root, $args, $context, $info)
{
return Hero::find($args['id']);
}
}
Below is an example of a Mutation class that returns if update worked:
<?php
namespace App\GraphQL\Mutations;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use Supliu\LaravelGraphQL\Mutation;
class UpdateHero extends Mutation
{
protected function typeResult(): Type
{
return new ObjectType([
'name' => 'UpdateHeroResult',
'fields' => [
'error' => Type::boolean(),
'message' => Type::string()
]
]);
}
/**
* @return array
*/
protected function args(): array
{
return [
'id' => Type::nonNull(Type::int())
'name' => Type::nonNull(Type::string())
];
}
/**
* @return mixed
*/
protected function resolve($root, $args, $context, $info)
{
Hero::find($args['id'])->update([
'name' => $args['name']
]);
return [
'error' => false,
'message' => 'Updated!'
];
}
}
The Laravel GraphQL is open-sourced project licensed under the MIT license.