PHPackages                             fivotech/laravel-auto-crud - 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. [Framework](/categories/framework)
4. /
5. fivotech/laravel-auto-crud

ActiveLibrary[Framework](/categories/framework)

fivotech/laravel-auto-crud
==========================

A Laravel package for automatic CRUD operations with dynamic query building and route generation

v1.0.0(8mo ago)025MITPHPPHP ^8.1

Since Oct 20Pushed 3mo agoCompare

[ Source](https://github.com/shiroe1036/laravel-auto-crud-api)[ Packagist](https://packagist.org/packages/fivotech/laravel-auto-crud)[ RSS](/packages/fivotech-laravel-auto-crud/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (7)Versions (3)Used By (0)

Laravel Auto CRUD Package
=========================

[](#laravel-auto-crud-package)

A highly flexible and customizable Laravel package that provides automatic CRUD operations with dynamic query building, automatic route generation, and comprehensive route management. Built with extensibility in mind, allowing developers to customize every aspect of the functionality through hooks and configuration.

Features
--------

[](#features)

- 🚀 **Automatic Route Generation**: Generate CRUD routes automatically based on your models
- � **Route Management**: Track, reset, and manage generated routes with metadata
- 🛡️ **Conflict Prevention**: Prevent route conflicts with existing routes in your application
- �🔍 **Dynamic Query Builder**: Advanced query building with filters, relationships, pagination, and more
- ⚙️ **Highly Customizable**: Extensible through hooks and configuration
- 📝 **JSON Query Parameters**: Support for complex filtering via JSON query parameters
- 🔄 **Relationship Handling**: Automatic handling of many-to-many relationships
- 📄 **Pagination Support**: Built-in pagination with configurable limits
- 🔒 **Flexible Authorization**: Custom authorization through hooks
- 💾 **Caching Support**: Optional query result caching
- 🪝 **Hook System**: Pre and post-processing hooks for complete customization

Installation
------------

[](#installation)

### Via Composer

[](#via-composer)

Add to your `composer.json`:

```
{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/shiroe1036/laravel-auto-crud-api"
        }
    ],
    "require": {
        "fivotech/laravel-auto-crud": "@dev"
    }
}
```

Then run:

```
composer update
```

### Publish Configuration

[](#publish-configuration)

```
php artisan vendor:publish --tag=auto-crud-config
```

Basic Usage
-----------

[](#basic-usage)

### 1. Safe Configuration for Existing Projects

[](#1-safe-configuration-for-existing-projects)

For existing Laravel projects with existing routes in `api.php`, use the safe configuration:

```
// config/auto-crud.php
return [
    // Disabled by default to prevent conflicts
    'auto_generate_routes' => false,

    // Use isolated prefix to avoid conflicts
    'route_prefix' => 'auto-crud',

    // Prevent route conflicts (highly recommended)
    'prevent_route_conflicts' => true,

    // Use isolated namespace for route names
    'route_name_pattern' => 'auto-crud.{resource}.{method}',

    // Auto-reset routes when config changes
    'auto_reset_on_config_change' => true,

    'models' => [
        App\Models\User::class => [],
        App\Models\Post::class => [
            'exclude_methods' => ['destroy'],
        ],
    ],
];
```

### 2. Environment Configuration

[](#2-environment-configuration)

```
# Route generation (disabled by default for safety)
AUTO_CRUD_GENERATE_ROUTES=false

# Use isolated prefix to prevent conflicts
AUTO_CRUD_ROUTE_PREFIX=auto-crud

# Enable conflict prevention
AUTO_CRUD_PREVENT_CONFLICTS=true

# Auto-reset when config changes
AUTO_CRUD_AUTO_RESET=true

# Use isolated route naming
AUTO_CRUD_ROUTE_NAME_PATTERN=auto-crud.{resource}.{method}
```

### 3. Using the Generic Query Builder

[](#3-using-the-generic-query-builder)

The package provides a powerful query builder for complex queries:

```
use FivoTech\LaravelAutoCrud\Services\GenericQueryBuilderService;

$queryBuilder = new GenericQueryBuilderService($request, User::class);
$users = $queryBuilder->getCollections();
$paginatedUsers = $queryBuilder->getCollectionsPaginated();
```

### 4. Extending the Base Controller

[](#4-extending-the-base-controller)

```
use FivoTech\LaravelAutoCrud\Controllers\AutoCrudController;

class UserController extends AutoCrudController
{
    public function __construct()
    {
        parent::__construct(User::class);
    }

    // All CRUD methods are handled automatically
    // Override specific methods if needed
}
```

Route Management Commands
-------------------------

[](#route-management-commands)

The package provides comprehensive route management with tracking and reset capabilities:

### Route Generation Commands

[](#route-generation-commands)

```
# Validate routes for conflicts before generating
php artisan auto-crud:generate-routes --validate

# Generate routes with dry-run to preview
php artisan auto-crud:generate-routes --dry-run

# Generate routes with automatic reset of existing ones
php artisan auto-crud:generate-routes --reset

# Generate routes for all configured models
php artisan auto-crud:generate-routes

# Generate for specific model
php artisan auto-crud:generate-routes --model="App\Models\User"

# Scan and generate routes for all discovered models
php artisan auto-crud:generate-routes --scan --directory="app/Models"
```

### Route Reset Commands

[](#route-reset-commands)

```
# Show current auto-generated routes
php artisan auto-crud:reset-routes --show

# Reset all auto-generated routes (with confirmation)
php artisan auto-crud:reset-routes --all

# Reset routes for specific models
php artisan auto-crud:reset-routes --models="App\Models\User,App\Models\Post"

# Force reset without confirmation (for scripts)
php artisan auto-crud:reset-routes --all --force

# Clean up stale metadata
php artisan auto-crud:reset-routes --cleanup
```

### Development Workflow

[](#development-workflow)

```
# 1. Always validate first
php artisan auto-crud:generate-routes --validate

# 2. Preview with dry-run
php artisan auto-crud:generate-routes --dry-run

# 3. Generate with auto-reset for clean state
php artisan auto-crud:generate-routes --reset

# 4. Check what was generated
php artisan auto-crud:reset-routes --show
```

Route Conflict Prevention
-------------------------

[](#route-conflict-prevention)

The package includes comprehensive conflict detection to safely work with existing Laravel routes:

### Conflict Detection Features

[](#conflict-detection-features)

- **Route Name Conflicts**: Prevents duplicate route names
- **Route Pattern Conflicts**: Detects conflicting URI patterns
- **Parameter Conflicts**: Handles route parameter overlaps
- **HTTP Method Conflicts**: Only checks conflicts for matching methods

### Safe Integration with Existing Projects

[](#safe-integration-with-existing-projects)

```
// Use isolated prefix to avoid conflicts
'route_prefix' => 'auto-crud', // Routes become /auto-crud/users instead of /api/users

// Use isolated route naming
'route_name_pattern' => 'auto-crud.{resource}.{method}', // Routes named auto-crud.users.index

// Enable conflict prevention
'prevent_route_conflicts' => true, // Skip conflicting routes automatically
```

### Route Metadata Tracking

[](#route-metadata-tracking)

Each generated route is tracked with metadata:

```
[
    'route_name' => [
        'model' => 'App\Models\User',
        'method' => 'index',
        'pattern' => 'users',
        'http_method' => 'GET',
        'generated_at' => '2025-08-24T10:30:00Z'
    ]
]
```

### Route Validation Examples

[](#route-validation-examples)

```
# Check for potential conflicts
php artisan auto-crud:generate-routes --validate

# Example output:
# ⚠️ Route conflicts detected:
# Model    Method  HTTP  Pattern      Name              Reason
# User     index   GET   api/users    users.index       Route name already exists
# Post     show    GET   api/posts/1  posts.show        Route pattern conflicts
```

Advanced Customization with Hooks
---------------------------------

[](#advanced-customization-with-hooks)

The package's real power lies in its hook system, allowing complete customization without modifying the core package.

### 1. Authorization Hooks

[](#1-authorization-hooks)

```
use FivoTech\LaravelAutoCrud\Controllers\AutoCrudController;

class SecureController extends AutoCrudController
{
    public function __construct($model = null)
    {
        $hooks = [
            'authorization' => function($request, $method, $model) {
                // Custom authorization logic
                if ($method === 'destroy') {
                    return $request->user()?->isAdmin() ?? false;
                }
                return true;
            }
        ];

        parent::__construct($model, ['hooks' => $hooks]);
    }
}
```

### 2. Data Processing Hooks

[](#2-data-processing-hooks)

```
$hooks = [
    'preprocess_data' => function($data, $request, $operation, $model) {
        // Add user_id to all create operations
        if ($operation === 'store') {
            $data['user_id'] = auth()->id();
        }
        return $data;
    },

    'postprocess_response' => function($response, $request, $operation, $model) {
        // Add metadata to all responses
        if (is_array($response)) {
            return [
                'data' => $response,
                'meta' => ['timestamp' => now()]
            ];
        }
        return $response;
    }
];
```

### 3. Multitenant Implementation Example

[](#3-multitenant-implementation-example)

```
use FivoTech\LaravelAutoCrud\Examples\MultitenantController;

class PersonController extends MultitenantController
{
    public function __construct()
    {
        parent::__construct(Person::class);
        // Multitenant functionality is automatically handled!
    }
}
```

### 4. Configuration-Based Hooks

[](#4-configuration-based-hooks)

In `config/auto-crud.php`:

```
'models' => [
    App\Models\User::class => [
        'hooks' => [
            'authorization' => function($request, $method, $model) {
                return $request->user()?->can($method, $model);
            },
            'preprocess_data' => function($data, $request, $operation, $model) {
                // Sanitize input
                if (isset($data['email'])) {
                    $data['email'] = strtolower(trim($data['email']));
                }
                return $data;
            }
        ]
    ],
],

// Global hooks applied to all models
'global_hooks' => [
    'postprocess_response' => function($response, $request, $operation, $model) {
        // Log all operations
        \Log::info("CRUD operation: {$operation} on " . (is_string($model) ? $model : get_class($model)));
        return $response;
    }
]
```

Available Hooks
---------------

[](#available-hooks)

Hook NameParametersDescription`authorization``($request, $method, $model)`Control access to operations`preprocess_data``($data, $request, $operation, $model)`Modify data before operations`preprocess_bulk_data``($dataArray, $request, $model)`Modify bulk data for inserts`preprocess_single_data``($data, $request, $model)`Modify single item data`postprocess_response``($response, $request, $operation, $model)`Modify response data`before_delete``($model, $request)`Execute before deletionQuery Parameters
----------------

[](#query-parameters)

The package supports powerful query parameters:

**Filters:**

```
GET /api/users?filters=[["name","like","%john%"],["age",">",18]]

```

**OR Filters:**

```
GET /api/users?orFilters=[["email","like","%gmail%"],["email","like","%yahoo%"]]

```

**Relationships:**

```
GET /api/users?relationship=[{"key":"posts","query":{"filters":[["published","=",true]]}}]

```

**Pagination:**

```
GET /api/users/paginate?per_page=20&page=2

```

**Field Selection:**

```
GET /api/users?select=["id","name","email"]

```

Example Implementations
-----------------------

[](#example-implementations)

### 1. Audit Trail Controller

[](#1-audit-trail-controller)

```
class AuditController extends AutoCrudController
{
    public function __construct($model = null)
    {
        $auditHooks = [
            'preprocess_data' => [$this, 'addAuditFields'],
            'before_delete' => [$this, 'logDeletion'],
        ];

        parent::__construct($model, ['hooks' => $auditHooks]);
    }

    public function addAuditFields($data, $request, $operation, $model)
    {
        if ($operation === 'store') {
            $data['created_by'] = auth()->id();
        } elseif ($operation === 'update') {
            $data['updated_by'] = auth()->id();
        }
        return $data;
    }

    public function logDeletion($model, $request)
    {
        \Log::info('Deleted: ' . get_class($model) . ' ID: ' . $model->id);
    }
}
```

### 2. Validation Controller

[](#2-validation-controller)

```
class ValidatedController extends AutoCrudController
{
    public function __construct($model = null)
    {
        $validationHooks = [
            'preprocess_data' => [$this, 'validateData'],
        ];

        parent::__construct($model, ['hooks' => $validationHooks]);
    }

    public function validateData($data, $request, $operation, $model)
    {
        $rules = $this->getValidationRules($operation, $model);

        $validator = \Validator::make($data, $rules);

        if ($validator->fails()) {
            throw new \Illuminate\Validation\ValidationException($validator);
        }

        return $data;
    }

    protected function getValidationRules($operation, $model)
    {
        // Define your validation rules based on operation and model
        return [];
    }
}
```

Commands
--------

[](#commands)

Generate routes for your models:

```
# Generate routes for all configured models
php artisan auto-crud:generate-routes

# Scan and generate routes for all models
php artisan auto-crud:generate-routes --scan

# Generate for specific model
php artisan auto-crud:generate-routes --model="App\Models\User"

# Dry run to see what would be generated
php artisan auto-crud:generate-routes --scan --dry-run
```

Generated API Endpoints
-----------------------

[](#generated-api-endpoints)

For each configured model, you get these endpoints (with configurable prefix):

MethodEndpointDescriptionRoute NameGET`/auto-crud/{resource}`List all items`auto-crud.{resource}.index`POST`/auto-crud/{resource}`Create new item`auto-crud.{resource}.store`GET`/auto-crud/{resource}/{id}`Show specific item`auto-crud.{resource}.show`PUT`/auto-crud/{resource}/{id}`Update item`auto-crud.{resource}.update`DELETE`/auto-crud/{resource}/{id}`Delete item`auto-crud.{resource}.destroy`GET`/auto-crud/{resource}/paginate`Paginated list`auto-crud.{resource}.paginate`### Route Examples

[](#route-examples)

With default isolated configuration:

```
GET    /auto-crud/users           -> auto-crud.users.index
POST   /auto-crud/users           -> auto-crud.users.store
GET    /auto-crud/users/1         -> auto-crud.users.show
PUT    /auto-crud/users/1         -> auto-crud.users.update
DELETE /auto-crud/users/1         -> auto-crud.users.destroy
GET    /auto-crud/users/paginate  -> auto-crud.users.paginate

```

### Customizing Route Patterns

[](#customizing-route-patterns)

```
// config/auto-crud.php
'route_prefix' => 'api/v2',           // Changes prefix to /api/v2/
'route_name_pattern' => 'api.{resource}.{method}', // Changes names to api.users.index
```

Migration Guide for Existing Projects
-------------------------------------

[](#migration-guide-for-existing-projects)

### Step 1: Install Safely

[](#step-1-install-safely)

```
composer require fivotech/laravel-auto-crud
php artisan vendor:publish --tag=auto-crud-config
```

### Step 2: Use Safe Configuration

[](#step-2-use-safe-configuration)

```
// config/auto-crud.php - Safe defaults
return [
    'auto_generate_routes' => false,        // Disabled by default
    'route_prefix' => 'auto-crud',          // Isolated prefix
    'prevent_route_conflicts' => true,      // Enable conflict detection
    'route_name_pattern' => 'auto-crud.{resource}.{method}',
    'models' => [
        // Add your models here
    ],
];
```

### Step 3: Validate Before Enabling

[](#step-3-validate-before-enabling)

```
php artisan auto-crud:generate-routes --validate
```

### Step 4: Test with Dry Run

[](#step-4-test-with-dry-run)

```
php artisan auto-crud:generate-routes --dry-run
```

### Step 5: Enable Gradually

[](#step-5-enable-gradually)

```
'auto_generate_routes' => true, // Enable when ready
```

Troubleshooting
---------------

[](#troubleshooting)

### Common Issues

[](#common-issues)

**Route Conflicts:**

```
# Check for conflicts
php artisan auto-crud:generate-routes --validate

# Use isolated prefix
AUTO_CRUD_ROUTE_PREFIX=auto-crud

# Use isolated naming
AUTO_CRUD_ROUTE_NAME_PATTERN=auto-crud.{resource}.{method}
```

**Stale Routes:**

```
# Clean up old routes
php artisan auto-crud:reset-routes --cleanup

# Reset all and regenerate
php artisan auto-crud:reset-routes --all
php artisan auto-crud:generate-routes
```

**Route Not Working:**

```
# Check current routes
php artisan auto-crud:reset-routes --show

# Validate metadata consistency
php artisan auto-crud:reset-routes --cleanup
```

Why This Package?
-----------------

[](#why-this-package)

✅ **No Vendor Lock-in**: Hooks allow complete customization without modifying core package ✅ **Incremental Adoption**: Use as much or as little as you need ✅ **Performance**: Optional caching and optimized queries ✅ **Security**: Flexible authorization through hooks ✅ **Maintainability**: Consistent patterns across your application ✅ **Extensibility**: Add any custom logic through the hook system ✅ **Safe Integration**: Conflict prevention ensures compatibility with existing routes ✅ **Route Management**: Track, reset, and manage generated routes comprehensively ✅ **Production Ready**: Enterprise-level route management with metadata tracking

Advanced Features
-----------------

[](#advanced-features)

### Route Metadata API

[](#route-metadata-api)

```
use FivoTech\LaravelAutoCrud\Services\AutoRouteGeneratorService;

$routeGenerator = app(AutoRouteGeneratorService::class);

// Check if routes are generated
$hasRoutes = $routeGenerator->hasGeneratedRoutes();

// Get all route metadata
$metadata = $routeGenerator->getGeneratedRoutesMetadata();

// Get routes for specific models
$userRoutes = $routeGenerator->getModelRoutesMetadata(['App\Models\User']);

// Get route counts by model
$counts = $routeGenerator->getGeneratedRoutesCount();

// Validate route consistency
$issues = $routeGenerator->validateGeneratedRoutes();

// Clean up stale metadata
$cleaned = $routeGenerator->cleanupStaleMetadata();
```

### Automated Deployment Workflow

[](#automated-deployment-workflow)

```
#!/bin/bash
# deployment-script.sh

# Reset all routes for clean state
php artisan auto-crud:reset-routes --all --force

# Validate configuration
php artisan auto-crud:generate-routes --validate

# Generate routes if validation passes
if [ $? -eq 0 ]; then
    php artisan auto-crud:generate-routes
    echo "Routes generated successfully"
else
    echo "Route conflicts detected, manual review required"
    exit 1
fi

# Clean up any stale metadata
php artisan auto-crud:reset-routes --cleanup
```

### Configuration Templates

[](#configuration-templates)

**For New Projects:**

```
// config/auto-crud.php - New project configuration
return [
    'auto_generate_routes' => true,
    'route_prefix' => 'api',
    'prevent_route_conflicts' => true,
    'route_name_pattern' => '{resource}.{method}',
    // ... other settings
];
```

**For Existing Projects:**

```
// config/auto-crud.php - Existing project configuration
return [
    'auto_generate_routes' => false,         // Manual control
    'route_prefix' => 'auto-crud',           // Isolated prefix
    'prevent_route_conflicts' => true,       // Mandatory for existing projects
    'route_name_pattern' => 'auto-crud.{resource}.{method}', // Isolated naming
    // ... other settings
];
```

Contributing
------------

[](#contributing)

Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.

License
-------

[](#license)

MIT License. See [LICENSE.md](LICENSE.md) for more information.

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance72

Regular maintenance activity

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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

Unknown

Total

1

Last Release

250d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/16a9874a0df3b73859279e83e1d6a879e792fcb6e4f55d87cabed28a50e894ca?d=identicon)[shiroe1036](/maintainers/shiroe1036)

---

Top Contributors

[![shiroe1036](https://avatars.githubusercontent.com/u/50911210?v=4)](https://github.com/shiroe1036 "shiroe1036 (12 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/fivotech-laravel-auto-crud/health.svg)

```
[![Health](https://phpackages.com/badges/fivotech-laravel-auto-crud/health.svg)](https://phpackages.com/packages/fivotech-laravel-auto-crud)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.5k28.4M137](/packages/laravel-cashier)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76518.2M120](/packages/laravel-mcp)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k14.1M122](/packages/laravel-pulse)[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.6k](/packages/larastan-larastan)[laravel/ai

The official AI SDK for Laravel.

9782.1M162](/packages/laravel-ai)

PHPackages © 2026

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