1. Go to this page and download the library: Download okipa/laravel-table library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
okipa / laravel-table example snippets
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Column;
use Okipe\LaravelTable\Formatters\Date;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
Column::make('id')->sortable(),
Column::make('name')->searchable()->sortable(),
Column::make('email')->searchable()->sortable(),
Column::make('created_at')
->format(new DateFormatter('d/m/Y H:i', 'Europe/Paris'))
->sortable(),
Column::make('updated_at')
->format(new DateFormatter('d/m/Y H:i', 'Europe/Paris'))
->sortable()
->sortByDefault('desc'),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
// You will now be able to use the provided `$this->categoryId` category ID in your table configuration.
public int $categoryId;
// ...
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
}
// `data-selector` HTML attribute will be appended to all tables HTML select components.
'html_select_components_attributes' => ['data-selector' => true],
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Illuminate\Database\Eloquent\Builder;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->query(fn(Builder $query) => $query->where('category_id', 1));
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->enableNumberOfRowsPerPageChoice(false);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
// Table will display 5 rows on initialization and will allow displaying 10, 15, 20 or 25 rows.
->numberOfRowsPerPageOptions([5, 10, 15, 20, 25]);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->rowClass(fn(User $user) => [
'table-danger' => ! $user->active,
]);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Filters\NullFilter;
use Okipa\LaravelTable\Filters\ValueFilter;
use Okipa\LaravelTable\Filters\BooleanFilter;
use Okipa\LaravelTable\Filters\RelationshipFilter;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->filters([
new ValueFilter('Email', 'email', User::pluck('email', 'email')->toArray()),
new RelationshipFilter('Categories', 'categories', UserCategory::pluck('name', 'id')->toArray()),
new NullFilter('Email Verified', 'email_verified_at'),
new BooleanFilter('Active', 'active'),
]);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use App\Tables\Filters\MyNewFilter;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->filters([
new MyNewFilter(),
]);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\HeadActions\AddHeadAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
// Create head action will not be available when authenticated user is not allowed to create users
->headAction((new AddHeadAction(route('user.create')))->when(Auth::user()->cannot('create_users')));
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use App\Tables\HeadActions\MyNewHeadAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->headAction(new MyNewHeadAction());
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\BulkActions\DestroyBulkAction;
use Okipa\LaravelTable\BulkActions\ActivateBulkAction;
use Okipa\LaravelTable\BulkActions\DeactivateBulkAction;
use Okipa\LaravelTable\BulkActions\VerifyEmailBulkAction;
use Okipa\LaravelTable\BulkActions\CancelEmailVerificationBulkAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->bulkActions(fn(User $user) => [
new VerifyEmailBulkAction('email_verified_at'),
new CancelEmailVerificationBulkAction('email_verified_at'),
new ActivateBulkAction('active'),
new DeactivateBulkAction('active'),
(new DestroyBulkAction())
// Destroy action will not be available for authenticated user
->when(Auth::user()->isNot($user))
// Override the action default confirmation question
// Or set `false` if you do not want to
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use App\Tables\BulkActions\MyNewBulkAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->bulkActions(fn(User $user) => [
new MyNewBulkAction(),
]);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\RowActions\EditRowAction;
use Okipa\LaravelTable\RowActions\ShowRowAction;
use Okipa\LaravelTable\RowActions\DestroyRowAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->rowActions(fn(User $user) => [
new ShowRowAction(route('user.show', $user)),
new EditRowAction(route('user.edit', $user)),
(new DestroyRowAction())
// Destroy action will not be available for authenticated user
->when(Auth::user()->isNot($user))
// Override the action default confirmation question
// Or set `false` if you do not want to
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use App\Tables\RowActions\MyNewRowAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
->rowActions(fn(User $user) => [
new MyNewRowAction(),
]);
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Column;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Column attribute set to `id`, column value set from `$user->id` and colum title set to `__('validation.attributes.id')`
Column::make('id'),
// Column attribute set to `name`, value set from `$user->name` and column title set to `Username`
Column::make('name')->title('Username'),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Column;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Value set from `$user->id`
Column::make('id'),
// Value set from closure
Column::make('username')
->format(fn(User $user) => '<b> ' . $user->companies->implode('name', ', ') . '</b>'),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Column;
use App\Tables\Formatters\NewFormatter;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
Column::make('id'),
Column::make('name')->format(new NewFormatter()),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\ColumnActions\ToggleBooleanColumnAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
use Okipa\LaravelTable\ColumnActions\ToggleBooleanColumnAction;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
Column::make('id'),
Column::make('email_verified_at')
// ToggleBooleanColumnAction action will not trigger any feedback message
->action(fn(User $user) => (new ToggleBooleanColumnAction()->feedbackMessage(false))
Column::make('active')
// ToggleBooleanColumnAction action will not be available for authenticated user
->action(fn(User $user) => (new ToggleBooleanColumnAction())->when(Auth::user()->isNot($user))),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use App\Tables\ColumnActions\MyNewColumnAction;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
Column::make('id'),
Column::make('action')->action(fn() => new MyNewColumnAction()),
];
}
}
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Column will not be searchable
Column::make('id'),
// Table will be searchable from `$user->name`
Column::make('name')->searchable(),
];
}
}
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Column will not be searchable
Column::make('id'),
// Column will be searchable using this closure
Column::make('owned_companies')
// ... Your custom formatting here
->searchable(fn(Builder $query, string $searchBy) => $query->whereRelation(
'companies',
'name',
'LIKE',
'%' . $searchBy . '%'
),
];
}
}
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Column will not be sortable
Column::make('id'),
// Column will be sortable from `$user->name`
Column::make('name')->sortable(),
];
}
}
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Column will not be sortable
Column::make('id'),
// Column will be sorted descending by default on `$user->name`
Column::make('name')->sortByDefault('desc'),
];
}
}
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
// Column will not be sortable
Column::make('id'),
// Column will be sortable from this closure
Column::make('companies_count')
// Custom formatting...
->sortable(fn(Builder $query, string $sortDir) => $query
->withCount('companies')
->orderBy('companies_count', $sortDir)),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
// A new column will display the drag-and-drop icon, followed by the `position` attribute value
// Rows will be sorted from the `position` model attribute and all other columns sorting will be disable
->reorderable('position');
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Okipa\LaravelTable\Column;
use Okipa\LaravelTable\Result;
use Illuminate\Support\Collection;
use Illuminate\Database\Query\Builder;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()->model(User::class);
}
protected function columns(): array
{
return [
Column::make('id'),
];
}
protected function results(): array
{
return [
// This result uses the first $totalRowsQuery closure param to compute its value.
// In this example, all users contained in database with unverified email will be count.
Result::make()
->title('Total of users with unverified email')
->format(static fn(Builder $totalRowsQuery) => $totalRowsQuery
->whereNull('email_verified_at')
->count()),
// This result uses the second $displayedRowsCollection closure param to compute its value.
// In this example, all displayed inactive users will be count.
Result::make()
->title('Displayed inactive users')
->format(static fn(
Builder $totalRowsQuery,
Collection $displayedRowsCollection
) => $displayedRowsCollection->where('active', false)->count()),
];
}
}
namespace App\Tables;
use App\Models\User;
use Okipa\LaravelTable\Table;
use Illuminate\Database\Eloquent\Builder;
use Okipa\LaravelTable\Abstracts\AbstractTableConfiguration;
class UsersTable extends AbstractTableConfiguration
{
protected function table(): Table
{
return Table::make()
->model(User::class)
// This event will be loaded each time your table will be rendered
// in order to keep your UI third party libraries rendering,
// even when its HTML is refreshed.
->emitEventsOnLoad(['js:selector:init' => ['some', 'params']]);
}
}