Installation
composer require coryrose/livewire-tables
Add the service provider to config/app.php:
'providers' => [
// ...
CoryRose\LivewireTables\LivewireTablesServiceProvider::class,
],
Basic Usage Create a Livewire component:
php artisan make:livewire UserTable
Define a table in your component:
use CoryRose\LivewireTables\LivewireTable;
public function table()
{
return LivewireTable::make()
->addColumn('id')
->addColumn('name')
->addColumn('email')
->paginate(10);
}
First Use Case Display a paginated table of users in a Blade view:
<livewire:user-table />
The package auto-generates search, pagination, and sorting controls.
Table Definition
Define columns and behavior in the table() method:
public function table()
{
return LivewireTable::make()
->addColumn('name', 'Name')
->addColumn('email', 'Email')
->addColumn('created_at', 'Joined')
->sortable(['name', 'email'])
->searchable(['name', 'email'])
->paginate(15);
}
Customizing Columns Use closures for dynamic column rendering:
->addColumn('status', function ($row) {
return $row->status === 'active' ? 'Active' : 'Inactive';
})
Integration with Eloquent Fetch data via a query builder or Eloquent model:
->setQuery($this->userModel->newQuery())
Reusable Components Extend the base table for shared functionality:
class BaseTable extends LivewireComponent
{
public function table()
{
return LivewireTable::make()
->paginate(20)
->searchable(['name', 'email']);
}
}
Event Handling
Listen to table events (e.g., sort, search) via wire:model or custom methods:
protected $listeners = ['refreshTable' => 'refreshData'];
Data Binding
table() method returns a LivewireTable instance; missing this causes silent failures.dd() check.Pagination Conflicts
cursor()), override the getPagination() method:
public function getPagination()
{
return $this->table->setPagination('cursor');
}
Search/Sort Performance
->searchable(['indexed_column']) and add database indexes.Blade Template Overrides
php artisan vendor:publish --provider="CoryRose\LivewireTables\LivewireTablesServiceProvider"
config/database.php to inspect generated SQL:
'log' => env('DB_LOG', false),
dd($this->table->getQuery()) to debug the current query state.Custom Views Override the default Blade templates by publishing and modifying:
php artisan vendor:publish --tag=livewire-tables-views
Column Actions Add action buttons dynamically:
->addAction('edit', 'Edit', function ($row) {
return '<a href="/users/' . $row->id . '/edit">Edit</a>';
})
API Integration For SPAs, expose the table data via a custom API endpoint:
public function getTableData()
{
return response()->json($this->table->getResults());
}
Localization
Customize labels (e.g., "Search", "Sort") via the setLabels() method:
->setLabels(['search' => 'Filter'])
config/livewire-tables.php:
'default_per_page' => 25,
'enable_search' => false,
'enable_sort' => false,
How can I help you explore Laravel packages today?