always-open / laravel-graphql-schema-generator
Generate GraphQL schema from existing Laravel models/database
Installs: 2 458
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 2
Open Issues: 0
Requires
- php: ^8.1.0|^8.2.0
- always-open/sidekick: ^4.0
- illuminate/contracts: ^9.0|^10.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.1
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.5
README
Generate GraphQL schema from existing Laravel models/database
This package will generate a GraphQL schema from your existing Laravel models and database. It reads through the existing models, relationships, and database to generate a GraphQL schema and optionally queries for each model. You can also specify additional models such as vendor/packages models to be included.
Installation
You can install the package via composer:
composer require always-open/laravel-graphql-schema-generator
You can publish the config file with:
php artisan vendor:publish --tag="laravel-graphql-schema-generator-config"
This is the contents of the published config file:
return [ 'custom_type_mappings' => [ 'timestamp' => 'DateTime', 'datetime' => 'DateTime', 'date' => 'Date', ], 'custom_scalar_definitions' => [ 'scalar Date @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Date")', 'scalar DateTime @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\DateTime")', ], 'model_path' => app_path('Models'), 'model_stub' => __DIR__ . '/../stubs/graphql_schema.stub', 'schema_path' => app_path('../graphql'), ];
Usage
Basic/default usage
This command will output the GraphQL schema to the schema_path
specified in the config file. It will only generate the
schema file and will only parse the models in the model_path
specified in the config file.
php artisan laravel-graphql-generator:create-schema
Outputting queries
To also add queries to the schema, pass the --include-queries
flag. This will generate a GraphQL schema file and query
files for each model in the model_path
specified in the config file.
php artisan laravel-graphql-generator:create-schema --include-queries
Adding additional models
If there are additional models that exist outside of the model_path
that you want to include, you can pass the
--additional-models
flag. This is very useful if you have vendor/package models that you want to include.
php artisan laravel-graphql-generator:create-schema --additional-models="\\Spatie\\Tags\\Tag"
You can also pass in a comma separated list of models to include.
php artisan laravel-graphql-generator:create-schema --additional-models="\\Spatie\\Tags\\Tag","\\Spatie\\Activitylog\\Models\\Activity"
Adding additional query properties
The default queries will be created using primary keys and unique indices. If you want to add additional properties to
search you can pass them in using the --additional-query-properties
flag. It will be applied to every model that has
the specified property.
This command could add queries using the properties key
and name
. Support for multiple fields isn't supported by the
pass in as of this version.
php artisan laravel-graphql-generator:create-schema --additional-query-properties=key,name
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.