caydeesoft / datatable-generator
A Laravel package for generating server-side DataTables classes
Requires
- php: ^8.2
- illuminate/support: ^11.0|^12.0|^13.0
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^9.0|^10.0
- phpunit/phpunit: ^11.0
README
A powerful and extensible DataTable scaffolding package for Laravel.
Generate server-side DataTables, Blade views, controllers, requests, policies, API resources, and complete admin stacks using Artisan commands.
Built for scalable Laravel applications.
Features
- Generate server-side DataTables
- Generate Blade DataTable views
- Generate full DataTable stacks
- Searchable columns
- Server-side pagination
- Ordering support
- Stub publishing support
- Extensible architecture
- Laravel package auto-discovery
- Laravel 11 & 12 support
- PHP 8.2+ support
Installation
Install the package via Composer:
composer require caydeesoft/datatable-generator
Package Auto Discovery
The package supports Laravel auto-discovery.
No manual provider registration required.
Publish Stubs
Publish all package stubs:
php artisan vendor:publish --tag=datatable-stubs
Published stubs:
stubs/
├── datatable.stub
└── datatable-view.stub
You can fully customize generated files by editing these stubs.
Commands
Generate DataTable
php artisan make:datatable UserDataTable User
With Search Columns
php artisan make:datatable UserDataTable User \
--search=name \
--search=email \
--search=phone
Generate DataTable View
php artisan make:datatable-view backend/users/index \
--route=backend.user.datatable \
--table=user-table \
--columns=id \
--columns=name \
--columns=email \
--columns=status \
--columns=action
Generate Full DataTable Stack
php artisan make:datatable-stack User \
--columns=id \
--columns=name \
--columns=email \
--columns=status \
--columns=action \
--search=name \
--search=email \
--controller \
--request \
--policy \
--api
Generated Structure
DataTable Generator
app/Http/Datatables/UserDataTable.php
View Generator
resources/views/backend/users/index.blade.php
Stack Generator
app/
├── Http/
│ ├── Controllers/
│ │ └── UserController.php
│ │
│ ├── Datatables/
│ │ └── UserDataTable.php
│ │
│ ├── Requests/
│ │ └── UserRequest.php
│ │
│ └── Resources/
│ └── UserResource.php
│
├── Policies/
│ └── UserPolicy.php
resources/
└── views/
└── backend/
└── users/
└── index.blade.php
Example Generated DataTable
<?php namespace App\Http\Datatables; use App\Models\User; class UserDataTable { public array $columns = [ 'id', 'name', 'email', ]; public function data($request): array { $query = User::query(); if ($search = $request->input('search.value')) { $query->where('name', 'LIKE', "%{$search}%") ->orWhere('email', 'LIKE', "%{$search}%"); } return [ 'data' => $query->get(), ]; } }
Example Generated View
@extends('layouts.backend') @section('content') <table id="user-table" class="table table-bordered"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Email</th> <th>Status</th> <th>Action</th> </tr> </thead> </table> @endsection @section('footer') <script type="application/javascript"> document.addEventListener('DOMContentLoaded', function () { new window.DataTable('#user-table', { processing: true, serverSide: true, ajax: { url: "{{ route('backend.user.datatable') }}", type: "POST", data: { _token: "{{ csrf_token() }}" } }, columns: [ {"data": "id"}, {"data": "name"}, {"data": "email"}, {"data": "status"}, {"data": "action"} ] }); }); </script> @endsection
Available Commands
| Command | Description |
|---|---|
make:datatable |
Generate DataTable class |
make:datatable-view |
Generate Blade DataTable view |
make:datatable-stack |
Generate full DataTable stack |
Command Options
make:datatable
| Option | Description |
|---|---|
--search=* |
Searchable columns |
make:datatable-view
| Option | Description |
|---|---|
--columns=* |
Table columns |
--route= |
AJAX route |
--table= |
HTML table ID |
make:datatable-stack
| Option | Description |
|---|---|
--columns=* |
Table columns |
--search=* |
Searchable columns |
--controller |
Generate controller |
--request |
Generate request |
--policy |
Generate policy |
--api |
Generate API resource |
Supported Versions
Laravel
| Version | Supported |
|---|---|
| 11.x | ✅ |
| 12.x | ✅ |
PHP
| Version | Supported |
|---|---|
| 8.2 | ✅ |
| 8.3 | ✅ |
| 8.4 | ✅ |
Stub Customization
All generated files are powered by stubs.
Publish stubs:
php artisan vendor:publish --tag=datatable-stubs
Modify:
stubs/datatable.stub
stubs/datatable-view.stub
to customize generated output.
Recommended DataTables Library
This package works perfectly with:
- DataTables.net
- Bootstrap DataTables
- Server-side Laravel DataTables
Official site:
Testing
Run tests:
composer test
Code Formatting
Run Laravel Pint:
composer format
Package Structure
datatable-generator/
├── src/
│ ├── Commands/
│ ├── Providers/
│ └── Support/
│
├── stubs/
│ ├── datatable.stub
│ └── datatable-view.stub
│
├── tests/
├── composer.json
├── README.md
└── LICENSE
Future Features
Planned features include:
- Dynamic schema detection
- Relationship searching
- Export support (CSV/XLSX/PDF)
- Filters
- Column permissions
- Bulk actions
- Query pipelines
- Vue integration
- React integration
- Livewire integration
- API DataTables
- Multi-tenant support
- Admin module scaffolding
- Yajra DataTables integration
Roadmap
Future commands:
php artisan make:admin-module php artisan make:datatable-filter php artisan make:datatable-export php artisan make:datatable-column
Contributing
Contributions are welcome.
Steps
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
Security
If you discover any security vulnerabilities, please email:
License
This package is open-sourced software licensed under the MIT license.
Author
Dennis Kiptugen
- Company: Caydeesoft
- Email: dennis.kiptoo@caydeesoft.com
Links
GitHub Repository
https://github.com/caydeesoft/datatable-generator
Packagist
https://packagist.org/packages/caydeesoft/datatable-generator