Installation:
composer require okipa/laravel-table
Publish the config file (if needed):
php artisan vendor:publish --provider="Okipa\LaravelTable\TableServiceProvider"
Basic Usage:
Generate a table for an Eloquent model (e.g., User) in a controller or blade view:
use Okipa\LaravelTable\Table;
$table = new Table(User::query());
$table->render();
Or directly in Blade:
@table(User::query())
First Use Case: Quickly scaffold a CRUD table for a model without writing repetitive code:
$table = new Table(User::query())
->setColumns(['id', 'name', 'email', 'created_at'])
->setSearchable(['name', 'email'])
->setSortable(['name', 'email']);
Dynamic Table Generation:
Table::make() or Table::forModel() for model-based tables:
$table = Table::forModel(User::class)->paginate(10);
$table->setColumns(['id', 'name', 'email'])
->setSearchable(['name'])
->setActions(['edit', 'delete']);
Blade Integration:
@table directive:
@table(User::query(), ['columns' => ['id', 'name']])
@table(User::query())
@column('name', 'Full Name')
@column('email', 'Email Address')
@endtable
API/JSON Output:
return response()->json($table->toArray());
Custom Actions:
$table->addAction('verify', 'Verify', function ($user) {
return route('users.verify', $user);
});
Relationships:
$table->addColumn('posts_count', function ($user) {
return $user->posts()->count();
});
Conditional Columns:
$table->addColumn('status', function ($user) {
return $user->is_active ? 'Active' : 'Inactive';
})->setVisible(function ($user) {
return auth()->user()->isAdmin();
});
Bulk Actions:
$table->addBulkAction('delete', 'Delete Selected', function ($users) {
$users->delete();
});
Exporting:
$table->export('csv', 'users.csv');
Performance:
with() can cause N+1 queries.$table = new Table(User::query()->with('posts'));
Column Naming:
setColumn() with custom labels:
$table->setColumn('name', 'Full Name', 'name');
Search/Sort Conflicts:
if (Schema::hasColumn('users', 'email')) {
$table->setSearchable(['email']);
}
Pagination:
$table->paginate(25);
Log Queries: Enable Laravel's query logging to debug slow tables:
DB::enableQueryLog();
$table->render();
dd(DB::getQueryLog());
Check Config:
config/table.php for global settings like default columns or actions.Blade Cache:
php artisan view:clear
Custom Renderers:
$table->setRenderer(new CustomRenderer());
Event Hooks:
table.rendering):
event(new TableRendering($table));
Service Provider:
TableServiceProvider:
public function boot()
{
Table::macro('customMethod', function () {
// Logic
});
}
Tailwind CSS:
.laravel-table th { background: #f8f9fa; }
How can I help you explore Laravel packages today?