tylerfiekens/graphqlite-laravel

A Laravel service provider package to help you get started with GraphQLite in Laravel.
3,587
Install
composer require tylerfiekens/graphqlite-laravel
Latest Version:v7.0.1
PHP:^8.2
License:MIT
Last Updated:Oct 19, 2024
Links: GitHub  ·  Packagist
Maintainer: TylerFiekens

Latest Stable Version Latest Unstable Version License Build Status

Laravel GraphQLite bindings

GraphQLite integration package for Laravel.

This package is based on the work of the friendly folks over at TheCodingMachine.

Installation

composer require tylerfiekens/graphqlite-laravel

Publish the configuration file

php artisan vendor:publish --provider="TheCodingMachine\GraphQLite\Laravel\Providers\GraphQLiteServiceProvider"

Usage

The package will automatically register the routes for the GraphQL endpoint. You can access the GraphQL endpoint at /graphql.

By default, the package will look for your GraphQL types in the App\GraphQL\Types namespace, and your queries and mutations in the App\GraphQL\Queries and App\GraphQL\Mutations namespaces respectively. You can change these settings in the config/graphqlite.php configuration file.

Types

To create a new type, you can just create a new class in the App\GraphQL\Types namespace. The only requirement is that the class must have a #[Type] annotation, which is used to register the type in the schema.

To add fields to the type, you can create public methods with a #[Field] annotation. The method name will be used as the field name.

<?php

namespace App\GraphQL\Types;

use TheCodingMachine\GraphQLite\Annotations\Type;
use TheCodingMachine\GraphQLite\Annotations\Field;

#[Type(name: 'Example')]
class ExampleType
{
    public function __construct(
        private readonly string $name
        private readonly array $data
    ) {
    }
    
    #[Field]
    public function name(): string
    {
        return $this->name;
    }
    
    #[Field]
    public function data(): array
    {
        return $this->data;
    }
}

That's it! The type will be automatically registered in the schema.

Queries

Now let's create a query to fetch an example object.

By default, the package will look for queries in the App\GraphQL\Queries namespace.

Queries are created in the same way as types, but with a #[Query] annotation instead of a #[Type] annotation.

<?php

namespace App\GraphQL\Queries;

use App\GraphQL\Types\ExampleType;
use TheCodingMachine\GraphQLite\Annotations\Query;

class ExampleQuery
{
    #[Query('example')]
    public function __invoke(): ExampleType
    {
        return new ExampleType('Example', ['data' => 'example']);
    }
}

The query will be automatically registered in the schema. You can now query it in your GraphQL client.

query {
    example {
        name
        data
    }
}

Mutations

Now let's create a mutation to create a new example object.

By default, the package will look for mutations in the App\GraphQL\Mutations namespace.

Mutations are created in the same way as queries, but with a #[Mutation] annotation instead of a #[Query] annotation.

<?php

namespace App\GraphQL\Mutations;

use App\GraphQL\Types\ExampleType;
use TheCodingMachine\GraphQLite\Annotations\Mutation;

class CreateExampleMutation
{
    #[Mutation(name: 'createExample')]
    public function __invoke(string $name, array $data): ExampleType
    {
        return new ExampleType($name, $data);
    }
}

The mutation will be automatically registered in the schema. You can now call it in your GraphQL client.

mutation {
    createExample(name: "Example", data: {data: "example"}) {
        name
        data
    }
}

Related Packages

thecodingmachine/graphqlite-laravel

A Laravel service provider package to help you get started with GraphQLite in La...

57,249 18
nuwave/lighthouse

A framework for serving GraphQL from Laravel

13,173,613 3,499
fandogh/graphql

Facebook GraphQL for Laravel

15 0
fandogh/laravel-graphql-relay

Adds relay specifications to laravel graphql server

18 1
rebing/graphql-laravel

Laravel wrapper for PHP GraphQL

8,564,878 2,221

Version History

Version Released PHP Laravel License
v7.0.1 ^8.2 ^11 MIT
v7.0.0 ^8.2 ^11 MIT
v6.2.3 ^8.1 ^9 || ^10 MIT
v5.0.4 >=7.2 ^5.7|^6.0|^7|^8|^9 MIT
v5.0.3 >=7.2 ^5.7|^6.0|^7|^8|^9 MIT