kevincobain2000 / laravel-erd
A tool to automatically generate interactive ERD relationships in Models for Laravel
Installs: 199 633
Dependents: 0
Suggesters: 0
Security: 0
Stars: 141
Watchers: 4
Forks: 27
Open Issues: 1
Requires
- php: ^7.4|^8.0|^8.1|^8.2|^8.3
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- brianium/paratest: ^6.2
- nunomaduro/collision: ^5.3
- orchestra/testbench: ^6.15
- phpunit/phpunit: ^9.3
- spatie/laravel-ray: ^1.23
- vimeo/psalm: ^4.8
README
Automatically generate interactive ERD from Models relationships in Laravel.
- This package provides a CLI to automatically generate interactive ERD by looking into relationships setup inside Models.
- The tool's interface is available to get JSON data of relationships and table schema from Models to be used by visual charts libraries of your choice such as d3.js etc
- Output is an interactive ERD (Entity Relation Diagram) powered by HTML and JS (GOJS).
Requirements
Installation
You can install the package via composer:
composer require kevincobain2000/laravel-erd --dev
You can publish the config file with:
php artisan vendor:publish --provider="Kevincobain2000\LaravelERD\LaravelERDServiceProvider"
Usage
You can access the ERD in localhost:3000/erd
or generate a static HTML
php artisan erd:generate
ERD HTML is generated inside docs/
.
Sample
Screenshot
Get JSON output
use Kevincobain2000\LaravelERD\LaravelERD; $modelsPath = base_path('app/Models'); $laravelERD = new LaravelERD(); $linkDataArray = $laravelERD->getLinkDataArray($modelsPath); $nodeDataArray = $laravelERD->getNodeDataArray($modelsPath); $erdData = json_encode( [ "link_data" => $linkDataArray, "node_data" => $nodeDataArray, ], JSON_PRETTY_PRINT ); var_dump($erdData);
Sample JSON output
{ "link_data": [ { "from": "comments", "to": "users", "fromText": "1..1\nBT", "toText": "", "fromPort": "author_id", "toPort": "id", "type": "BelongsTo" }, { "from": "comments", "to": "posts", "fromText": "1..1\nBT", "toText": "", "fromPort": "post_id", "toPort": "id", "type": "BelongsTo" }, ... ... ], "node_data": [ { "key": "comments", "schema": [ { "name": "id", "isKey": true, "figure": "Hexagon", "color": "#be4b15", "info": "integer" }, { "name": "author_id", "isKey": false, "figure": "Decision", "color": "#6ea5f8", "info": "integer" }, ... ... } ... ]
Testing
./vendor/bin/phpunit
Changelog
- Initial Release - POC