decowood/laravel-eloquent-to-graphql

Automatically turn Eloquent models into GraphQL

v1.0.3 2023-11-24 07:09 UTC

This package is auto-updated.

Last update: 2024-04-24 08:11:44 UTC


README

Tests Latest Stable Version License

This package generates a static GraphQL schema from your Eloquent models.

It is suggested to be used with lighthouse.

Setup

  1. Install the package:
composer require --dev brausepulver/laravel-eloquent-to-graphql
  1. Type-hint your models' relationships:
use Illuminate\Database\Eloquent\Relations\HasMany;

class User extends Model
{
    public function cuteCats(): HasMany
    {
        ...
    }
}
  1. (Optional) Publish the configuration file:
php artisan vendor:publish --tag="eloquent_to_graphql.config"

Usage

php artisan e2gql

This will generate a schema for all your models in a single file at graphql/generated.graphql.

There are several options for customizing the way the schema is generated. Please have a look at them with
php artisan e2gql --help.

Configuration

Automatic Updates

To automatically update the schema every time one of your Eloquent models changes, you can register the command in your IDE of choice with the --force option, which disables all prompts.

If you are using VSCode, this can be achieved using the Run on Save extension. After installing the extension, you can add the following to .vscode/settings.json:

    "emeraldwalk.runonsave": {
        "commands": [
            {
                "match": "app/Models/.*\\.php",
                "isAsync": true,
                "cmd": "php artisan e2gql --force"
            }
        ]
    }

With standard project structure, this will update your schema every time an Eloquent model changes.

Custom Type Mappings

If your tables have columns with types unknown to DBAL, the command will let you know. In this case, you have two options:

  1. Let the command know which type that is known by DBAL you would like to map the unkown type to. You can do this by adding both to custom_type_mappings in config/eloquent_to_graphql.php:
    'custom_type_mappings' => [
        'from-type' => 'to-type'
    ]
  1. Ignore the columns entirely using the --exclude-columns option. You can then later add them by hand.

TODO

  • Option to automatically update the schema after migrations are run
  • Way to keep changes made by the user when regenerating a schema
  • More customizable type resolution