This package generates a static GraphQL schema from your Eloquent models.
It is suggested to be used with lighthouse.
- Install the package:
composer require --dev brausepulver/laravel-eloquent-to-graphql
- Type-hint your models' relationships:
use Illuminate\Database\Eloquent\Relations\HasMany;
class User extends Model
{
public function cuteCats(): HasMany
{
...
}
}
- (Optional) Publish the configuration file:
php artisan vendor:publish --tag="eloquent_to_graphql.config"
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
.
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.
If your tables have columns with types unknown to DBAL, the command will let you know. In this case, you have two options:
- 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
inconfig/eloquent_to_graphql.php
:
'custom_type_mappings' => [
'from-type' => 'to-type'
]
- Ignore the columns entirely using the
--exclude-columns
option. You can then later add them by hand.
- 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