A Laravel package for generating Entity-Relationship Diagrams (ERD) of your database schema. This tool is designed to support multiple database systems like MySQL, PostgreSQL, SQLite, SQL Server, and Oracle.
- Automatically scans your database schema for tables and their relationships.
- Generates ERD diagrams in PDF format using Graphviz.
- Extensible design with support for multiple database drivers.
- PHP 8.1 or higher
- Laravel 10.x or higher
- Graphviz installed on your system
composer require rtcoder/laravel-db-erdIf you need to customize the behavior, publish the configuration file:
php artisan vendor:publish --tag=db-erd-configIf you need to customize the views, you can publish them using:
php artisan vendor:publish --tag=db-erd-viewsThis will copy the default views to your project's resources/views/vendor/laravel-erd directory, where you can modify them as needed.
Ensure Graphviz is installed on your system.
brew install graphvizsudo apt install graphvizDownload and install from Graphviz's official site.
Generate an ERD Run the following Artisan command to generate the ERD:
php artisan erd:generate --output=storage/erd/erd_diagram.pdf --driver=mysqlThe --output option specifies the file path for the generated diagram.
Check Graphviz availability
php artisan erd:doctorThe command verifies that the Graphviz dot binary is available in PATH and prints its detected path and version.
Generate from your application code
use Rtcoder\LaravelERD\Contracts\ERDGeneratorInterface;
class ExportSchemaController
{
public function __invoke(ERDGeneratorInterface $generator): void
{
$generator->generate(storage_path('erd/schema.svg'), 'pgsql');
}
}You can also resolve the service from the container:
app(ERDGeneratorInterface::class)->generate(storage_path('erd/schema.html'), 'mysql');
app('erd-generator')->generate(storage_path('erd/schema.pdf'), 'pgsql');The package registers the generator in Laravel's service container, so you can generate diagrams from controllers, jobs, commands, scheduled tasks, tests, or any other application service.
Available bindings:
| Binding | Description |
|---|---|
Rtcoder\LaravelERD\Contracts\ERDGeneratorInterface |
Recommended dependency injection target. |
Rtcoder\LaravelERD\Services\ERDGenerator |
Concrete generator implementation. |
erd-generator |
String alias for quick container resolution. |
Controller example:
namespace App\Http\Controllers;
use Rtcoder\LaravelERD\Contracts\ERDGeneratorInterface;
class ExportSchemaController
{
public function __invoke(ERDGeneratorInterface $generator): string
{
$path = storage_path('erd/schema.svg');
$generator->generate($path, 'pgsql');
return $path;
}
}Queued job example:
namespace App\Jobs;
use Rtcoder\LaravelERD\Contracts\ERDGeneratorInterface;
class GenerateSchemaDiagram
{
public function handle(ERDGeneratorInterface $generator): void
{
$generator->generate(storage_path('erd/schema.html'), config('erd.default_driver'));
}
}Supported Databases
- MySQL
- PostgreSQL
- SQLite
- SQL Server
- Oracle
Available database drivers are represented by the Rtcoder\LaravelERD\Enums\DatabaseConnection enum. PostgreSQL also accepts postgres, postgresql, and psql aliases.
Supported output formats
- SVG
- PNG
- HTML
Available output formats are represented by the Rtcoder\LaravelERD\Enums\OutputFormat enum.
You can customize the package by modifying the configuration file (config/erd.php):
return [
'default_driver' => env('DB_ERD_DRIVER', env('DB_CONNECTION', 'pgsql')),
'output_directory' => storage_path('erd'),
'output_name' => 'erd_diagram',
'output_format' => 'pdf',
'exclude_tables' => ['migrations', 'jobs', 'failed_jobs'],
];The package exposes concrete exceptions so you can handle generator failures without catching a generic Exception.
| Exception | When it is thrown |
|---|---|
Rtcoder\LaravelERD\Exceptions\UnsupportedOutputFormatException |
The output file extension is not one of pdf, png, svg, or html. |
Rtcoder\LaravelERD\Exceptions\InvalidConnectionNameException |
The selected database driver is not supported. |
Rtcoder\LaravelERD\Exceptions\DirectoryCreationException |
The output directory cannot be created. |
Rtcoder\LaravelERD\Exceptions\TemporaryFileCreationException |
The temporary DOT file for Graphviz cannot be created. |
Rtcoder\LaravelERD\Exceptions\FileWriteException |
The generated DOT or HTML file cannot be written. |
Rtcoder\LaravelERD\Exceptions\GraphvizRenderException |
Graphviz exits with a non-zero status while rendering PDF, PNG, or SVG output. |
Rtcoder\LaravelERD\Exceptions\ViewNotFoundException |
The HTML diagram Blade view cannot be found in the application or package paths. |
Rtcoder\LaravelERD\Exceptions\ERDException |
Base exception for runtime generation failures. |
Example:
use Rtcoder\LaravelERD\Exceptions\ERDException;
use Rtcoder\LaravelERD\Exceptions\InvalidConnectionNameException;
use Rtcoder\LaravelERD\Exceptions\UnsupportedOutputFormatException;
use Rtcoder\LaravelERD\Contracts\ERDGeneratorInterface;
try {
app(ERDGeneratorInterface::class)->generate(storage_path('erd/schema.svg'), 'pgsql');
} catch (UnsupportedOutputFormatException|InvalidConnectionNameException $exception) {
report($exception);
} catch (ERDException $exception) {
report($exception);
}Ensure Graphviz is correctly installed and the dot binary is available in your system's PATH.
You can check this from Laravel with:
php artisan erd:doctorbrew install graphvizsudo apt install graphvizInstall Graphviz from the official download page, or use one of the package manager commands below:
winget install graphvizchoco install graphvizIf the command still cannot find dot, restart your terminal and verify that the Graphviz bin directory is included in PATH.
Verify that your database schema has relationships (foreign keys).
This package is open-source software licensed under the MIT license.