Server-Side Processing

Move filtering, ordering, and paging to the backend for large datasets.

Minimal Setup

use Pentiminax\UX\DataTables\Model\DataTable;

$dataTable = new DataTable('products');
$dataTable
    ->ajax('/api/products')
    ->serverSide(true)
    ->processing(true);

Request Parameters Sent By DataTables

Parameter Purpose
`draw`Request sequence number
`start`Offset
`length`Page size
`search[value]`Global search term
`order[n][column]`Sorted column index
`order[n][dir]`Sort direction
`columns[n][name]`Column name
`columns[n][search][value]`Per-column filter

Parse Request With DataTableRequest

use Pentiminax\UX\DataTables\DataTableRequest\DataTableRequest;

$requestDto = DataTableRequest::fromRequest($request);

Typical Controller With AbstractDataTable

use Pentiminax\UX\DataTables\DataTableRequest\DataTableRequest;

if ($request->isXmlHttpRequest()) {
    $table->handleRequest($request);

    return $table->getResponse();
}

if (!$table->getDataTable()->isServerSide()) {
    $table->fetchData(DataTableRequest::fromRequest($request));
}

Best Practices

  • Always whitelist sortable/searchable fields in your query layer.
  • Keep backend response time predictable (indexes, query limits).
  • Prefer AbstractDataTable for reusable query behavior.
  • Ensure your table resolves a provider in server-side mode, either through createDataProvider() or #[AsDataTable(...)]; otherwise getResponse() falls back to an empty payload.