Skip to content
Zonvoir Table LogoZonvoir Table

Table Base Class API Reference

Zonvoir\ZonvoirTable\Table is the abstract base class for backend table definitions.

Item Value
Class Zonvoir\ZonvoirTable\Table
Type abstract class
Implements Arrayable, JsonSerializable
Required override columns()
Factory methods make(), create()
Property Type Default Purpose
$resource ?string null Eloquent model class used by query().
$search `array string null`
$defaultSort ?string null Default sort key. Prefix with - for descending.
$pagination bool true Enable pagination.
$paginationType PaginationType PaginationType::Standard Select standard, simple, or cursor pagination.
$perPageOptions ?array [15, 30, 50, 100] Allowed per-page values.
$defaultPerPage ?int 15 Default per-page value.
$scrollToTop bool true Frontend pagination scroll behavior.
$stickyHeader ?bool false Sticky header metadata.
$rowSelectionKey ?string 'id' Row key used for selection.
$selectable bool true Enable row selection.
$persistRowSelectionAcrossPages bool false Preserve selected keys across page changes.
$emptyState `TableEmptyState array false
make()

Signature

public static function make(): static

Notes

Instantiate the table.

create()

Signature

public static function create(): static

Notes

Alias of `make()`.

name()

Signature

public function name(): string

Notes

Explicit or inferred table name.

isNamed()

Signature

public function isNamed(): bool

Notes

Check for an explicit table name.

id()

Signature

public function id(): string

Notes

Alias-style accessor for `name()`.

named()

Signature

public function named(string $name): static

Notes

Clone with a query namespace.

as()

Signature

public function as(string $name): static

Notes

Alias of `named()`.

columns()

Signature

abstract public function columns(): array

Notes

Required. Return `list`.

resource()

Signature

public function resource(): Builder|string|null

Notes

Return a model class, builder, or null.

query()

Signature

public function query(): Builder

Notes

Resolve the table query from `resource()`.

apply()

Signature

public function apply(?Builder $query = null, ?TableRequest $request = null): Builder

Notes

Apply search and sort to a query.

paginate()

Signature

public function paginate(?Builder $query = null, ?TableRequest $request = null): mixed

Notes

Run the configured paginator.

results()

Signature

public function results(?Builder $query = null, ?TableRequest $request = null): array

Notes

Return definition plus paginated rows.

payload()

Signature

public function payload(?TableRequest $request = null): array

Notes

Build the table definition payload.

definition()

Signature

public function definition(): array

Notes

Alias-style definition payload without request input.

toArray()

Signature

public function toArray(): array

Notes

Serialize results for the current request.

jsonSerialize()

Signature

public function jsonSerialize(): array

Notes

Delegate to `toArray()`.

transformModel()

Signature

public function transformModel(Model $model, array $data): array

Modify serialized row data.

rowUrl()

Signature

public function rowUrl(Model $model, Url $url): string|Url|null

Add row navigation metadata.

actions()

Signature

public function actions(): array

Return row and bulk `Action` definitions.

exports()

Signature

public function exports(): array

Return `Export` definitions.

isSelectable()

Signature

public function isSelectable(Model $model): bool

Decide whether a row can be selected.

defaultState()

Signature

public function defaultState(): array|TableStateContract

Override initial state.

meta()

Signature

public function meta(): array

Build table metadata. Usually extended with care.

emptyState()

Signature

public function emptyState(): TableEmptyState|array|false|null

Return empty state metadata.

withQueryBuilder()

Signature

public function withQueryBuilder(TableQueryBuilder $queryBuilder): ?TableQueryBuilder

Customize the query builder service.

state()

Signature

public function state(?TableRequest $request = null): TableState

Merge default state and table request input.

stateFromRequest()

Signature

public function stateFromRequest(Request $request): TableState

Build state from an HTTP request.

defaultSort()

Signature

public function defaultSort(): ?string

Read default sort configuration.

stickyHeader()

Signature

public function stickyHeader(): bool

Read sticky header configuration.

rowSelectionKey()

Signature

public function rowSelectionKey(): ?string

Resolve selected row key name.

persistsRowSelectionAcrossPages()

Signature

public function persistsRowSelectionAcrossPages(): bool

Read row selection persistence configuration.

navigation()

Signature

public function navigation(?TableRequest $request = null): TableNavigation

Build query string transitions.

searchable()

Signature

public function searchable(): array

Normalize table-level search fields.

pagination()

Signature

public function pagination(): PaginationConfiguration

Resolve pagination configuration.

pageName()

Signature

public function pageName(): string

Resolve query string page key.

cursorName()

Signature

public function cursorName(): string

Resolve query string cursor key.

queryStringState()

Signature

public function queryStringState(Contracts\TableState $state, bool $includePage = false): array

Serialize state for URLs.

columnsDefinition()

Signature

public function columnsDefinition(): array

Validate and normalize column definitions.

actionsDefinition()

Signature

public function actionsDefinition(): array

Validate and normalize action definitions.

exportsDefinition()

Signature

public function exportsDefinition(): array

Validate and normalize export definitions.

use App\Models\User;
use Zonvoir\ZonvoirTable\Columns\TextColumn;
use Zonvoir\ZonvoirTable\Table;
class UsersTable extends Table
{
protected ?string $resource = User::class;
protected array|string|null $search = ['name', 'email'];
protected ?string $defaultSort = 'name';
public function columns(): array
{
return [
TextColumn::make('name')->sortable()->searchable(),
TextColumn::make('email')->searchable(),
];
}
}