northwestern-sysdev / er-diagram-tool
Automatically generate entity relationship diagrams for a Laravel application
Installs: 23 080
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Language:Blade
Requires
- php: ^8.2
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- brianium/paratest: ^7.0
- laravel/pint: ^1.10
- nunomaduro/collision: ^7.0
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
Conflicts
README
Automatically generate interactive entity relationship diagram for models & their relationships in Laravel and emit a static HTML file for use in a VuePress site.
This package is a heavily-customized fork from kevincobain2000/laravel-erd meant for use in some very specific circumstances. If you're not part of @NIT-Administrative-Systems, you should probably check out the original package instead!
The changes include:
- Adding ribbons to models in the diagram with PHP attributes on the model class
- Different default settings for goJS to render huge diagrams efficiently
- Different default settings for discovering models in
App\Domains\<something>\Models
namespaces
Installation
You can install the package via composer.
composer require northwestern-sysdev/er-diagram-tool --dev
Usage
You can generate a static HTML file with the artisan command:
php artisan erd:generate
This will be placed in docs/.vuepress/public/erd
, or whatever path you have configured in config/laravel-erd.php
.
Using Ribbons
Enabling ribbon support is done by registering a function to get ribbons.
First, create an attribute with some properties you want to include in the ribbon:
#[Attribute(Attribute::TARGET_CLASS)] class LookupAttr { public function __construct( public readonly string $source, ) { // } }
Next, register a callback in a provider's
class AppServiceProvider extends ServiceProvider { public function boot(): void { /** @var ModelRibbonAdapter $adapter */ $adapter = resolve(ModelRibbonAdapter::class); \Kevincobain2000\LaravelERD\LaravelERDServiceProvider::setRibbonClosure($adapter->callback()); } private function ribbonCallback(): Closure { return function (Model $model) { $reflection = new ReflectionClass($model); $attributes = collect($reflection->getAttributes()) ->map->newInstance() ->filter(fn (object $attrObj) => $attrObj instanceof LookupAttr); return $attributes ->map(function (LookupAttr $attr) { return new \Kevincobain2000\LaravelERD\Diagram\Ribbon( text: $attribute->source, bgColour: '#FFE342', textColour: 'black', ); }) ->first(); }; } }
And then use the attribute on some models:
#[LookupAttr('Student System')] class DegreeType extends Model { // . . . }
This will pick them up and add a ribbon with the "Student System" text on it, indicating the table is populated from the student system's degree types.