PHPackages                             grazulex/laravel-modelschema - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. grazulex/laravel-modelschema

ActiveLibrary[Database &amp; ORM](/categories/database)

grazulex/laravel-modelschema
============================

Generate and manage Laravel model schemas with automatic validation, documentation, and migration helpers for better data structure management.

v1.1.0(11mo ago)828612MITPHPPHP ^8.3CI passing

Since Aug 4Pushed 10mo ago1 watchersCompare

[ Source](https://github.com/Grazulex/laravel-modelschema)[ Packagist](https://packagist.org/packages/grazulex/laravel-modelschema)[ Docs](https://github.com/grazulex/laravel-modelschema)[ Fund](https://paypal.me/strauven)[ GitHub Sponsors](https://github.com/Grazulex)[ RSS](/packages/grazulex-laravel-modelschema/feed)WikiDiscussions main Synced today

READMEChangelog (2)Dependencies (11)Versions (3)Used By (2)

Laravel ModelSchema
===================

[](#laravel-modelschema)

[![Laravel ModelSchema](new_logo.png)](new_logo.png)

A foundational Laravel package for schema-driven development. Parse YAML schemas, generate insertable fragments for models, migrations, requests, resources, factories, seeders, controllers, tests, policies, observers, services, actions, and validation rules. Built to power Laravel TurboMaker, Arc, and other schema-based packages.

\[!\[Latest Version\]( Field Types &amp; Extensions

- \*\*📋 \[Field Types Guid### Core Documentation
- **🏗️ [Architecture Guide](docs/ARCHITECTURE.md)** - Understanding the package structure and design
- **✨ [New Generators Guide](docs/NEW_GENERATORS.md)** - Observer, Service, Action, Rule generators (v2.0)
- **📈 [Migration Guide](docs/MIGRATION.md)** - Upgrading from previous versions
- **📊 [Fragment Examples](examples/FRAGMENTS.md)** - Understanding generated fragmentsocs/FIELD\_TYPES.md)\*\* - Complete field types reference
- **🔌 [Field Type Plugins](docs/FIELD_TYPE_PLUGINS.md)** - Creating custom field type plugins
- **✨ [Custom Attributes Examples](examples/CUSTOM_ATTRIBUTES.md)** - Practical examples of custom attributes usage
- **✅ [Custom Field Validation](docs/CUSTOM_FIELD_TYPES_VALIDATION.md)** - Validating custom field types.io/packagist/v/grazulex/laravel-modelschema.svg?style=flat-square)\]() [![Total Downloads](https://camo.githubusercontent.com/36fd5b153c114d7e682937dd115a79fe3e017715af2c0421cc3a722cbd987cc9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6772617a756c65782f6c61726176656c2d6d6f64656c736368656d612e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/grazulex/laravel-modelschema)[![License](https://camo.githubusercontent.com/4ec0d6e503ef8b90fc39f049af2d9bb703ca5bef4d7cd88a54847f2b3cded1ca/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6772617a756c65782f6c61726176656c2d6d6f64656c736368656d612e7376673f7374796c653d666c61742d737175617265)](https://github.com/Grazulex/laravel-modelschema/blob/main/LICENSE.md)[![PHP Version](https://camo.githubusercontent.com/d2e43c9958353874597be1916144072c008ba410d6b7c399597672b92b4f8b34/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6772617a756c65782f6c61726176656c2d6d6f64656c736368656d612e7376673f7374796c653d666c61742d737175617265)](https://php.net/)[![Laravel Version](https://camo.githubusercontent.com/7592d340e2de1142fa869382b819654d6a0bf7baf8e3c8aded777d652d68c01a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d31322e782d6666326432303f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c)](https://laravel.com/)[![Tests](https://camo.githubusercontent.com/7e0c868627a279eccc52e623ab67001238b45a1e2dd18f991504d25bbecc9ead/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6772617a756c65782f6c61726176656c2d6d6f64656c736368656d612f74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/Grazulex/laravel-modelschema/actions)[![Code Style](https://camo.githubusercontent.com/161d70e6871f808e0439b3e7a86540993ae98775540b5a2e78226000e3c419c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64652532307374796c652d70696e742d3030303030303f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c)](https://github.com/laravel/pint)

Overview
--------

[](#overview)

Laravel ModelSchema provides **schema parsing, validation, and fragment generation** for Laravel applications. Instead of generating complete files, it produces **insertable JSON/YAML fragments** that parent applications can integrate into their own generation workflows.

**🎯 Core Purpose**: Enable schema-driven development with clean separation between core schema logic and application-specific generation.

### 🚀 Key Features

[](#-key-features)

- **🔍 Schema Parsing &amp; Validation** - Parse YAML schemas with core/extension separation
- **🧩 Fragment Generation** - Generate insertable JSON/YAML fragments for Laravel artifacts
- **🏗️ Clean Architecture** - Separate core schema responsibilities from app-specific generation
- **🔄 Multi-Generator Support** - Models, Migrations, Requests, Resources, Factories, Seeders, Controllers, Tests, Policies, Observers, Services, Actions, Rules
- **📈 Schema Analysis** - Advanced schema comparison, optimization, and performance analysis
- **🔌 Plugin System** - Extensible field type plugins for custom functionality
- **📊 Integration API** - Complete workflow for external packages (TurboMaker, Arc, etc.)
- **✨ Extensible Design** - Custom field types, generators, and validation rules

� Installation
--------------

[](#-installation)

```
composer require grazulex/laravel-modelschema
```

🏗️ Architecture
---------------

[](#️-architecture)

### Core Services

[](#core-services)

- **`SchemaService`** - Main API for parsing, validation, and core/extension separation
- **`GenerationService`** - Coordinates all generators to produce insertable fragments
- **`YamlOptimizationService`** - Advanced YAML parsing with lazy loading, streaming, and intelligent caching
- **`SchemaDiffService`** - Advanced schema comparison and difference analysis
- **`SchemaOptimizationService`** - Performance analysis and optimization recommendations
- **13 Specialized Generators** - Model, Migration, Request, Resource, Factory, Seeder, Controller, Test, Policy, Observer, Service, Action, Rule
- **`FieldTypePluginManager`** - Manages extensible field type plugins for custom functionality

### Schema Structure

[](#schema-structure)

The package uses a **"core" structure** to clearly separate core schema data from application extensions:

```
core:
  model: User
  table: users
  fields:
    name:
      type: string
      nullable: false
    email:
      type: string
      unique: true
  relations:
    posts:
      type: hasMany
      model: App\Models\Post
  options:
    timestamps: true
    soft_deletes: false

# Extensions added by parent applications
turbomaker:
  views: ['index', 'create', 'edit']
  routes: ['api', 'web']

arc:
  permissions: ['view', 'create', 'edit', 'delete']
```

🚀 Quick Start
-------------

[](#-quick-start)

### 1. Basic Schema Parsing

[](#1-basic-schema-parsing)

```
use Grazulex\LaravelModelschema\Services\SchemaService;

$schemaService = new SchemaService();

// Parse and separate core from extensions
$result = $schemaService->parseAndSeparateSchema($yamlContent);
// Returns: ['core' => [...], 'extensions' => [...]]

// Validate only the core schema
$errors = $schemaService->validateCoreSchema($yamlContent);

// Extract structured data for generation
$data = $schemaService->extractCoreContentForGeneration($yamlContent);
```

### 2. Complete Integration Workflow

[](#2-complete-integration-workflow)

```
// 1. Generate complete YAML from stub + app data
$completeYaml = $schemaService->generateCompleteYamlFromStub(
    'user.schema.stub',
    ['MODEL_NAME' => 'User', 'TABLE_NAME' => 'users'],
    $appExtensionData
);

// 2. Validate the complete YAML (focuses on core section)
$errors = $schemaService->validateFromCompleteAppYaml($completeYaml);

// 3. Extract all generation data as insertable fragments
$generationData = $schemaService->getGenerationDataFromCompleteYaml($completeYaml);

// 4. Use fragments in your application
$modelFragment = json_decode($generationData['generation_data']['model']['json'], true);
$migrationFragment = json_decode($generationData['generation_data']['migration']['json'], true);
```

### 3. Fragment-Based Generation

[](#3-fragment-based-generation)

```
use Grazulex\LaravelModelschema\Services\GenerationService;

$generationService = new GenerationService();

// Generate all fragments for a schema
$fragments = $generationService->generateAll($schema);

// Result structure:
// [
//   'model' => ['json' => '{"model": {...}}', 'yaml' => 'model: {...}'],
//   'migration' => ['json' => '{"migration": {...}}', 'yaml' => 'migration: {...}'],
//   'requests' => ['json' => '{"requests": {...}}', 'yaml' => 'requests: {...}'],
//   'resources' => ['json' => '{"resources": {...}}', 'yaml' => 'resources: {...}'],
//   'factory' => ['json' => '{"factory": {...}}', 'yaml' => 'factory: {...}'],
//   'seeder' => ['json' => '{"seeder": {...}}', 'yaml' => 'seeder: {...}'],
//   'controllers' => ['json' => '{"controllers": {...}}', 'yaml' => 'controllers: {...}'],
//   'tests' => ['json' => '{"tests": {...}}', 'yaml' => 'tests: {...}'],
//   'policies' => ['json' => '{"policies": {...}}', 'yaml' => 'policies: {...}'],
//   'observers' => ['json' => '{"observers": {...}}', 'yaml' => 'observers: {...}'],
//   'services' => ['json' => '{"services": {...}}', 'yaml' => 'services: {...}'],
//   'actions' => ['json' => '{"actions": {...}}', 'yaml' => 'actions: {...}'],
//   'rules' => ['json' => '{"rules": {...}}', 'yaml' => 'rules: {...}']
// ]
```

🏗️ Available Generators
-----------------------

[](#️-available-generators)

Laravel ModelSchema provides 13 specialized generators, each producing insertable JSON/YAML fragments:

### Core Laravel Components

[](#core-laravel-components)

GeneratorDescriptionOutput Fragment**Model**Eloquent model with relationships, casts, and configurations`model: {class_name, table, fields, relations, casts, ...}`**Migration**Database migration with fields, indexes, and foreign keys`migration: {table, fields, indexes, foreign_keys, ...}`**Request**Form Request classes for validation (Store/Update)`requests: {store: {...}, update: {...}}`**Resource**API Resource classes for data transformation`resources: {main_resource: {...}, collection_resource: {...}}`**Factory**Model Factory for testing and seeding`factory: {class_name, definition, states, ...}`**Seeder**Database Seeder for data population`seeder: {class_name, model, count, relationships, ...}`### Advanced Components

[](#advanced-components)

GeneratorDescriptionOutput Fragment**Controller**API and Web Controllers with CRUD operations`controllers: {api_controller: {...}, web_controller: {...}}`**Test**PHPUnit test classes (Feature and Unit)`tests: {feature_tests: [...], unit_tests: [...]}`**Policy**Authorization Policy classes`policies: {class_name, methods, gates, ...}`### Business Logic Components (New in v2.0)

[](#business-logic-components-new-in-v20)

GeneratorDescriptionOutput Fragment**Observer**Eloquent Observer with model event handlers`observers: {class_name, events, methods, ...}`**Service**Business logic Service classes with CRUD operations`services: {class_name, methods, dependencies, ...}`**Action**Single-responsibility Action classes`actions: {crud_actions: [...], business_actions: [...]}`**Rule**Custom Validation Rule classes`rules: {business_rules: [...], foreign_key_rules: [...]}`### Usage Examples

[](#usage-examples)

```
// Generate specific components
$observerFragment = $generationService->generateObservers($schema);
$serviceFragment = $generationService->generateServices($schema);
$actionFragment = $generationService->generateActions($schema);
$ruleFragment = $generationService->generateRules($schema);

// Generate multiple new components
$fragments = $generationService->generateMultiple($schema, [
    'observers', 'services', 'actions', 'rules'
]);

// Generate everything including new components
$allFragments = $generationService->generateAll($schema, [
    'model' => true,
    'migration' => true,
    'requests' => true,
    'resources' => true,
    'factory' => true,
    'seeder' => true,
    'controllers' => true,
    'tests' => true,
    'policies' => true,
    'observers' => true,    // New
    'services' => true,     // New
    'actions' => true,      // New
    'rules' => true,        // New
]);
```

🔧 API Reference
---------------

[](#-api-reference)

### SchemaService

[](#schemaservice)

MethodDescriptionReturns`parseAndSeparateSchema()`Parse YAML and separate core/extensions`['core' => array, 'extensions' => array]``validateCoreSchema()`Validate only core schema section`array` (errors)`extractCoreContentForGeneration()`Extract structured core data`array``generateCompleteYamlFromStub()`Generate complete YAML from stub`string``getGenerationDataFromCompleteYaml()`Extract all generation fragments`array`### GenerationService

[](#generationservice)

MethodDescriptionReturns`generateAll()`Generate all fragments for schema`array``generateSingle()`Generate single generator fragment`array``getAvailableGenerators()`List available generators`array`🔌 Trait-Based Field Type Plugin System
--------------------------------------

[](#-trait-based-field-type-plugin-system)

Laravel ModelSchema features an extensible plugin system using a trait-based architecture for custom field types. This modern approach provides powerful customization through traits and configuration objects.

### Plugin Manager

[](#plugin-manager)

```
use Grazulex\LaravelModelschema\Support\FieldTypePluginManager;

$manager = new FieldTypePluginManager();

// Register a custom plugin
$manager->registerPlugin(new CustomFieldTypePlugin());

// Auto-discover plugins in specific paths
$manager->discoverPlugins([
    'App\\FieldTypes\\*Plugin',
    'Custom\\Packages\\*FieldTypePlugin'
]);

// Get all registered plugins
$plugins = $manager->getAllPlugins();
```

### Creating Custom Plugins with Traits

[](#creating-custom-plugins-with-traits)

The new trait-based approach allows you to define field options through configuration arrays rather than hardcoded properties:

```
use Grazulex\LaravelModelschema\Support\FieldTypePlugin;

class UrlFieldTypePlugin extends FieldTypePlugin
{
    protected string $version = '1.0.0';
    protected string $author = 'Your Name';
    protected string $description = 'Advanced URL field with validation traits';

    public function __construct()
    {
        // Define custom attributes using trait-based configuration
        $this->customAttributes = [
            'schemes', 'verify_ssl', 'timeout', 'domain_whitelist', 'max_redirects'
        ];

        // Configure each attribute with validation traits
        $this->customAttributeConfig = [
            'schemes' => [
                'type' => 'array',
                'default' => ['http', 'https'],
                'enum' => ['http', 'https', 'ftp', 'ftps'],
                'description' => 'Allowed URL schemes for validation'
            ],
            'verify_ssl' => [
                'type' => 'boolean',
                'default' => true,
                'description' => 'Enable SSL certificate verification'
            ],
            'timeout' => [
                'type' => 'integer',
                'min' => 1,
                'max' => 300,
                'default' => 30,
                'description' => 'Connection timeout in seconds'
            ],
            'domain_whitelist' => [
                'type' => 'array',
                'required' => false,
                'validator' => function ($value): array {
                    // Custom validation trait for domain lists
                    if (!is_array($value)) return ['must be an array'];
                    foreach ($value as $domain) {
                        if (!filter_var("http://{$domain}", FILTER_VALIDATE_URL)) {
                            return ["Invalid domain: {$domain}"];
                        }
                    }
                    return [];
                }
            ]
        ];
    }

    public function getType(): string
    {
        return 'url';
    }

    public function getAliases(): array
    {
        return ['website', 'link', 'uri'];
    }
}
```

### Trait-Based Custom Attributes System

[](#trait-based-custom-attributes-system)

The trait-based plugin system supports sophisticated custom attributes through configuration objects:

- **Type validation traits**: `string`, `int`, `boolean`, `array`, etc.
- **Constraint traits**: `min`, `max`, `required`, `enum` values
- **Default value traits**: Automatically applied if not provided
- **Custom validator traits**: Callback functions for complex validation logic
- **Transformation traits**: Custom value transformation before storage
- **Integration traits**: Seamlessly merged with Laravel's standard attributes

#### Advanced Trait Examples

[](#advanced-trait-examples)

```
// Numeric validation traits
'timeout' => [
    'type' => 'integer',
    'min' => 1,
    'max' => 300,
    'default' => 30,
    'transform' => fn($value) => (int) $value // Type transformation trait
],

// Array validation traits with enum constraints
'schemes' => [
    'type' => 'array',
    'enum' => ['http', 'https', 'ftp', 'ftps'],
    'default' => ['http', 'https'],
    'validator' => function($schemes): array {
        // Custom validation trait
        return array_filter($schemes, fn($s) => in_array($s, ['http', 'https']));
    }
],

// Complex custom validator traits
'domain_pattern' => [
    'type' => 'string',
    'validator' => function($pattern): array {
        if (!preg_match('/^\/.*\/[gimxs]*$/', $pattern)) {
            return ['Domain pattern must be a valid regex'];
        }
        return [];
    }
]
```

**📖 See [Field Type Plugins Documentation](docs/FIELD_TYPE_PLUGINS.md) for complete trait-based implementation guide.**

📁 Example Schema Files
----------------------

[](#-example-schema-files)

### Basic User Schema

[](#basic-user-schema)

```
core:
  model: User
  table: users
  fields:
    name:
      type: string
      nullable: false
      rules: ['required', 'string', 'max:255']
    email:
      type: string
      unique: true
      rules: ['required', 'email', 'unique:users']
    email_verified_at:
      type: timestamp
      nullable: true
    password:
      type: string
      rules: ['required', 'string', 'min:8']
  options:
    timestamps: true
    soft_deletes: false
```

### Blog Post Schema with Relations

[](#blog-post-schema-with-relations)

```
core:
  model: Post
  table: posts
  fields:
    title:
      type: string
      rules: ['required', 'string', 'max:255']
    slug:
      type: string
      unique: true
      rules: ['required', 'string', 'unique:posts']
    content:
      type: text
      rules: ['required']
    published_at:
      type: timestamp
      nullable: true
    user_id:
      type: foreignId
      rules: ['required', 'exists:users,id']
  relations:
    user:
      type: belongsTo
      model: App\Models\User
    comments:
      type: hasMany
      model: App\Models\Comment
    tags:
      type: belongsToMany
      model: App\Models\Tag
      pivot_table: post_tags
  options:
    timestamps: true
    soft_deletes: true
```

� Integration with Parent Applications
--------------------------------------

[](#-integration-with-parent-applications)

This package is designed to be consumed by larger Laravel packages like **TurboMaker** and **Arc**. Here's the typical integration pattern:

### Parent Application Workflow

[](#parent-application-workflow)

```
// 1. Parent app generates complete YAML
$yaml = $schemaService->generateCompleteYamlFromStub('user.schema.stub', [
    'MODEL_NAME' => 'User',
    'TABLE_NAME' => 'users'
], $parentAppData);

// 2. Parent app validates the schema
$errors = $schemaService->validateFromCompleteAppYaml($yaml);
if (!empty($errors)) {
    throw new ValidationException($errors);
}

// 3. Parent app extracts generation fragments
$data = $schemaService->getGenerationDataFromCompleteYaml($yaml);

// 4. Parent app integrates fragments into its own files
$parentAppGenerator->generateModelFile($data['generation_data']['model']['json']);
$parentAppGenerator->generateMigrationFile($data['generation_data']['migration']['json']);
// ... etc for requests, resources, factory, seeder
```

### Fragment Structure

[](#fragment-structure)

Each generator produces insertable fragments with this structure:

```
{
  "model": {
    "class_name": "User",
    "table": "users",
    "fields": [...],
    "relations": [...],
    "casts": {...},
    "options": {...}
  }
}
```

The parent application receives these fragments and inserts them into its own generation templates.

🧪 Testing
---------

[](#-testing)

```
# Run all tests
composer test

# Run with coverage
composer test-coverage

# Run specific test file
./vendor/bin/pest tests/Unit/SchemaServiceTest.php
```

🔧 Requirements
--------------

[](#-requirements)

- **PHP**: ^8.3
- **Laravel**: ^12.19 (optional, used in service provider)
- **Symfony YAML**: ^7.3 (for YAML parsing)

📚 Documentation
---------------

[](#-documentation)

### Core Documentation

[](#core-documentation)

- **🏗️ [Architecture Guide](docs/ARCHITECTURE.md)** - Understanding the package structure and design
- **� [Migration Guide](docs/MIGRATION.md)** - Upgrading from previous versions
- **📊 [Fragment Examples](examples/FRAGMENTS.md)** - Understanding generated fragments

### Field Types &amp; Extensions

[](#field-types--extensions)

- **� [Field Types Guide](docs/FIELD_TYPES.md)** - Complete field types reference
- **🔌 [Field Type Plugins](docs/FIELD_TYPE_PLUGINS.md)** - Creating custom field type plugins
- **✅ [Custom Field Validation](docs/CUSTOM_FIELD_TYPES_VALIDATION.md)** - Validating custom field types

### Advanced Features

[](#advanced-features)

- **📝 [Logging System](docs/LOGGING.md)** - Comprehensive logging and debugging
- **⚡ [Enhanced Features](docs/enhanced-features.md)** - Advanced capabilities overview
- **� [YAML Optimization](docs/YAML-OPTIMIZATION.md)** - High-performance YAML parsing with intelligent caching and streaming
- **�🔍 [Schema Optimization](docs/SCHEMA_OPTIMIZATION.md)** - Schema analysis and optimization tools
- **🔒 [Security Features](docs/SECURITY.md)** - Comprehensive security validation and protection

### Integration Examples

[](#integration-examples)

- **🔗 [Integration Example](examples/IntegrationExample.php)** - Complete integration workflow
- **✨ [New Generators Example](examples/NewGeneratorsExample.php)** - Observer, Service, Action, Rule generators demo
- **🛠️ [Schema Service API](examples/SchemaServiceApiExample.php)** - API usage examples
- **📋 [API Extensions](examples/ApiExtensions.php)** - Extended API implementations
- **🚀 [YAML Optimization Examples](examples/YamlOptimizationExamples.php)** - Performance optimization usage and examples
- **⚡ [Schema Optimization Usage](examples/SchemaOptimizationUsage.php)** - Advanced schema analysis examples
- **🔒 [Security Usage Examples](examples/SecurityUsageExamples.php)** - Security validation and protection examples

🤝 Contributing
--------------

[](#-contributing)

We welcome contributions! Please see our Contributing Guide for details.

🔒 Security
----------

[](#-security)

Please review our Security Policy for reporting vulnerabilities.

📄 License
---------

[](#-license)

Laravel ModelSchema is open-sourced software licensed under the MIT license.

---

Made with ❤️ by Jean-Marc Strauven ()

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance52

Moderate activity, may be stable

Popularity20

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

333d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4521546?v=4)[Jean-Marc Strauven](/maintainers/Grazulex)[@Grazulex](https://github.com/Grazulex)

---

Top Contributors

[![Grazulex](https://avatars.githubusercontent.com/u/4521546?v=4)](https://github.com/Grazulex "Grazulex (48 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (5 commits)")

---

Tags

datalaravelpackageclilaravelschemavalidationmigrationdatabasedocumentationmodeleloquentclean codelaravel12php8.3

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/grazulex-laravel-modelschema/health.svg)

```
[![Health](https://phpackages.com/badges/grazulex-laravel-modelschema/health.svg)](https://phpackages.com/packages/grazulex-laravel-modelschema)
```

###  Alternatives

[laravel/horizon

Dashboard and code-driven configuration for Laravel queues.

4.2k95.4M306](/packages/laravel-horizon)[laravel/sail

Docker files for running a basic Laravel application.

1.9k205.7M1.3k](/packages/laravel-sail)[illuminate/database

The Illuminate Database package.

2.8k54.9M11.6k](/packages/illuminate-database)[mongodb/laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel

7.1k8.4M96](/packages/mongodb-laravel-mongodb)[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[watson/validating

Eloquent model validating trait.

9803.5M54](/packages/watson-validating)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
