PHPackages                             hendabastian/laracrud-apigen - 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. [API Development](/categories/api)
4. /
5. hendabastian/laracrud-apigen

ActiveLibrary[API Development](/categories/api)

hendabastian/laracrud-apigen
============================

Generate complete CRUD APIs for Laravel with Repository pattern, Spatie QueryBuilder, JSON:API pagination, and DTOs.

1.0.6(5mo ago)1134MITPHPPHP ^8.2

Since Mar 9Pushed 4mo agoCompare

[ Source](https://github.com/hendabastian/laracrud-apigen)[ Packagist](https://packagist.org/packages/hendabastian/laracrud-apigen)[ RSS](/packages/hendabastian-laracrud-apigen/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (7)Dependencies (6)Versions (10)Used By (0)

LaraCRUD Generator
==================

[](#laracrud-generator)

Generate complete CRUD APIs for Laravel with a single Artisan command.

Features
--------

[](#features)

- API Controller with full CRUD operations
- Form Request validation classes (Create &amp; Update)
- API Resource for JSON transformation
- Repository pattern (Interface + Implementation) with listing logic in the repository layer
- DTO generation using Spatie Laravel Data
- Spatie Query Builder integration (filters, sorts, includes) — encapsulated in the repository
- JSON:API pagination via Spatie JSON API Paginate (config-driven parameter names and defaults)
- OpenAPI documentation attributes driven by `json-api-paginate` config (supports `page[number]`/`page[size]` and cursor pagination)
- Automatic route registration
- Automatic service provider binding
- Smart column type detection (MySQL, PostgreSQL, SQLite, SQL Server) with automatic `Carbon` casting for date/datetime/timestamp columns

Requirements
------------

[](#requirements)

- PHP 8.2+
- Laravel 11 or 12

### Optional (recommended)

[](#optional-recommended)

- `spatie/laravel-query-builder` — for query filtering/sorting
- `spatie/laravel-json-api-paginate` — for JSON:API pagination
- `spatie/laravel-data` — for DTO generation

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

[](#installation)

```
composer require hendabastian/laracrud-apigen --dev
```

Usage
-----

[](#usage)

```
php artisan generate:crud-api {ModelName}
```

### Examples

[](#examples)

```
# Generate CRUD for User model
php artisan generate:crud-api User

# Generate CRUD for a multi-word model
php artisan generate:crud-api JobApplication

# Overwrite existing files
php artisan generate:crud-api User --force

# Skip repository pattern
php artisan generate:crud-api User --skip-repository

# Skip DTO generation
php artisan generate:crud-api User --skip-dto

# Skip route registration
php artisan generate:crud-api User --skip-routes
```

### Generated Files

[](#generated-files)

For `php artisan generate:crud-api Company`:

ComponentPathController`app/Http/Controllers/Api/CompanyController.php`Create Request`app/Http/Requests/Api/Company/CompanyCreateRequest.php`Update Request`app/Http/Requests/Api/Company/CompanyUpdateRequest.php`Resource`app/Http/Resources/Api/CompanyResource.php`Repository Interface`app/Repositories/Contracts/CompanyRepositoryInterface.php`Repository`app/Repositories/CompanyRepository.php`DTO`app/DTO/CompanyDTO.php`Routes`routes/api.php` (appended)### Generated API Endpoints

[](#generated-api-endpoints)

```
GET     /api/companies          — List (with filters, sorts, pagination)
POST    /api/companies          — Create
GET     /api/companies/{id}     — Show
PUT     /api/companies/{id}     — Update
DELETE  /api/companies/{id}     — Delete

```

Configuration
-------------

[](#configuration)

Publish the config file:

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

Available options in `config/crud-generator.php`:

```
return [
    'model_namespace'       => 'App\\Models',
    'controller_namespace'  => 'App\\Http\\Controllers\\Api',
    'request_namespace'     => 'App\\Http\\Requests\\Api',
    'resource_namespace'    => 'App\\Http\\Resources\\Api',
    'repository_namespace'  => 'App\\Repositories',
    'dto_namespace'         => 'App\\DTO',
    'route_file'            => 'routes/api.php',
    'service_provider'      => 'app/Providers/AppServiceProvider.php',
    'excluded_columns'      => ['id', 'created_at', 'updated_at', ...],
    'use_query_builder'     => true,
    'use_json_api_paginate' => true,
    'use_spatie_data'       => true,
];
```

Customizing Business Logic
--------------------------

[](#customizing-business-logic)

The generated code is yours to modify. The repository pattern keeps all data-access logic (including listing with filters, sorts, and pagination) in the repository layer, keeping controllers thin.

### Generated repository structure

[](#generated-repository-structure)

The generated repository includes a `list()` method that encapsulates query builder logic:

```
// app/Repositories/CompanyRepository.php (generated)
