LaravelPackages.net
Acme Inc.
Toggle sidebar
kevincobain2000/laravel-erd

A tool to automatically generate interactive ERD relationships in Models for Laravel

288.909
155
1.7
About kevincobain2000/laravel-erd

kevincobain2000/laravel-erd is a Laravel package for a tool to automatically generate interactive erd relationships in models for laravel. It currently has 155 GitHub stars and 288.909 downloads on Packagist (latest version 1.7). Install it with composer require kevincobain2000/laravel-erd. Discover more Laravel packages by kevincobain2000 or browse all Laravel packages to compare alternatives.

Last updated

Laravel ERD Generator

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).

| Lang | Link | | :------ | :------------------------------------------------------------------------------------------------------------------------------------- | | Details | Medium Article | | Demo | Online Demo |

Requirements

| Lang | Version | | :------ | :--------- | | PHP | 7.4 or 8.0 | | Laravel | 6.* or 8.* |

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

Image

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

Star History Chart