Model diagram
Generate an ER diagram of Eloquent models in Mermaid format.From its SKILL.md
npx -y skills add edulazaro/laraclaude --skill model-diagramAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.6 KB, as published. Nobody here has run it
Model Diagram
Generate an Entity-Relationship diagram of Eloquent models in Mermaid syntax. The output can be pasted into GitHub markdown, Notion, Mermaid Live Editor, or any tool that supports Mermaid diagrams.
Subcommands
| Subcommand | Description |
|---|---|
| (no argument) | Generate an ER diagram of all models and their relationships. |
all | Same as no argument -- diagram all models. |
[ModelName] | Generate a focused diagram showing one model and its direct relationships (1 level deep). |
This is a generator skill -- it produces diagram output.
Process
Step 1: Collect All Models
- Use
Globto find allapp/Models/*.phpfiles. - If a
[ModelName]argument is provided, start with that model and include only directly related models.
Step 2: Parse Each Model
For each model, use Read to extract:
A. Table Name
- From
$tableproperty or derive from class name (Laravel convention:Property->properties)
B. Key Columns
Parse the corresponding migration to extract important columns:
- Primary key (id)
- Foreign key columns (*_id)
- Key business columns (name, title, status, type, email, etc.)
- Timestamps and soft deletes
Limit to the most important 8-12 columns per model to keep the diagram readable. Always include:
- Primary key
- All foreign keys
- Name/title columns
- Status/type columns
C. Relationships
Extract from model methods:
belongsTo-> Many-to-one (FK on this model)hasMany-> One-to-many (FK on related model)hasOne-> One-to-one (FK on related model)belongsToMany-> Many-to-many (pivot table)morphTo,morphMany,morphOne-> PolymorphichasManyThrough,hasOneThrough-> Through relationships
Step 3: Generate Mermaid ER Diagram
Build the Mermaid erDiagram syntax:
erDiagram
ORGANIZATIONS {
bigint id PK
string name
string code
string color_scheme
timestamp created_at
}
USERS {
bigint id PK
bigint organization_id FK
bigint office_id FK
string name
string email
boolean active
}
PROPERTIES {
bigint id PK
bigint organization_id FK
bigint office_id FK
bigint user_id FK
string name
string reference
string status
decimal price
}
CLIENTS {
bigint id PK
bigint organization_id FK
bigint office_id FK
string name
string email
string phone
}
OPERATIONS {
bigint id PK
bigint property_id FK
bigint client_seller_id FK
string type
string status
decimal price
}
ORGANIZATIONS ||--o{ USERS : "has many"
ORGANIZATIONS ||--o{ PROPERTIES : "has many"
ORGANIZATIONS ||--o{ CLIENTS : "has many"
USERS ||--o{ PROPERTIES : "manages"
PROPERTIES ||--o{ OPERATIONS : "has many"
CLIENTS ||--o{ OPERATIONS : "sells"
Relationship Notation
Use Mermaid ER diagram relationship types:
| Eloquent | Mermaid | Symbol | Meaning |
|---|---|---|---|
belongsTo / hasOne | one-to-one | ||--|| | Exactly one to exactly one |
hasMany | one-to-many | ||--o{ | One to zero or more |
belongsToMany | many-to-many | }o--o{ | Zero or more to zero or more |
morphMany | polymorphic | ||--o{ | One to zero or more (labeled as polymorphic) |
Step 4: Handle Large Codebases
For projects with many models (20+):
- Full diagram: Include all models but limit columns to FK columns and 2-3 key business columns.
- Focused diagram: When a
[ModelName]is provided, show:- The target model with full column details
- Direct relationships (1 level deep) with reduced columns
- Relationship labels indicating the method name
Step 5: Add Polymorphic Notes
Polymorphic relationships cannot be represented as standard ER relationships. Add notes:
erDiagram
ACTIVITIES {
bigint id PK
string activitable_type
bigint activitable_id
string field
string old_value
string new_value
}
PROPERTIES ||--o{ ACTIVITIES : "morphMany"
CLIENTS ||--o{ ACTIVITIES : "morphMany"
Include a text note below the diagram:
Note: ACTIVITIES uses polymorphic relationships via activitable_type/activitable_id.
Types: property, client (see morph map in AppServiceProvider)
Step 6: Output
Present the Mermaid diagram in a fenced code block:
```mermaid
erDiagram
...
```
Also provide:
- Total models included
- Total relationships mapped
- Any models excluded (and why, e.g., pivot models without additional columns)
- Notes about polymorphic relationships
If the diagram is very large, suggest splitting by domain area (e.g., Property domain, Client domain, Calendar domain).
Notes
- Mermaid has rendering limits. Diagrams with 30+ entities may not render well. Suggest splitting in those cases.
- Pivot tables for
belongsToManyare typically not shown as separate entities unless they have additional columns beyond the two FK columns. - The diagram shows the logical data model, not the physical database schema. Some implementation details (indexes, constraints) are omitted for clarity.
- For the most accurate diagram, combine migration analysis (columns and types) with model analysis (relationships).
- If a model's table is not found in migrations (e.g., managed by a package), note it and include the model with just its relationships.