supliu/laravel-graphql

GraphQL with Laravel Framework

Installs: 124

Dependents: 0

Suggesters: 0

Security: 0

Stars: 34

Watchers: 3

Forks: 3

Open Issues: 0

Language:Blade

1.0.1 2020-08-04 16:08 UTC

This package is auto-updated.

Last update: 2022-06-21 16:59:17 UTC


README

logo.png

Laravel GraphQL

Latest Stable Version Total Downloads Latest Unstable Version License

The objective of this project is to facilitate the integration of the webonyx/graphql-php with the Laravel Framework

graphiql.png

How to install

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"

How to use

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
]

Query

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']);
    }
}

Mutation

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!'
        ];
    }
}

License

The Laravel GraphQL is open-sourced project licensed under the MIT license.