Skip to content

Pagination โ€‹

Enabling Pagination โ€‹

Chain showPerPage() on PowerGrid::footer() to enable the paginator and the per-page dropdown.

phpapp/Livewire/ProductTable.php
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid; 

class ProductTable extends PowerGridComponent
{
    public function setUp(): array
    {
        return [
            PowerGrid::footer()
                 ->showPerPage(perPage: 10, perPageValues: [0, 50, 100, 500]), 
        ];
    }
}

$perPage is the default page size (default 10). $perPageValues is the dropdown (default [10, 25, 50, 100, 0]). 0 is "show all".

TIP

If $perPage is missing from $perPageValues, PowerGrid adds it.

Config max_per_page (default 1000) caps rows fetched in one request. Set 0 to disable the cap. See Max Per Page.

Disabling Pagination โ€‹

Without showPerPage(), the per-page dropdown is hidden but rows are still paginated, 10 per page. To render every row on one page, use showPerPage(0, [0]). max_per_page still caps the rows.

phpapp/Livewire/ProductTable.php
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid; 

class ProductTable extends PowerGridComponent
{
    public function setUp(): array
    {
        return [
            PowerGrid::footer()
                 ->showPerPage(perPage: 0, perPageValues: [0]) 
                 ->showRecordCount(mode: 'full'),
        ];
    }
}

Record Count โ€‹

Chain showRecordCount() on PowerGrid::footer().

ModeDescription
fullFull sentence: Showing 1 to 10 of 100 Results
shortShort: 1 - 10 โ”‚ 100
minMinimal: 1 - 10
phpapp/Livewire/ProductTable.php
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid; 

class ProductTable extends PowerGridComponent
{
    public function setUp(): array
    {
        return [
            PowerGrid::footer()
                 ->showRecordCount(mode: 'full'), 
        ];
    }
}

URL Page Parameter โ€‹

pageName() changes the query-string key (default page). Use it when two tables share a page so their paginators do not collide. Non-alphanumeric characters are stripped; an empty result falls back to page.

The example below yields ?productPage=2&userPage=5.

php
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid; 

class ProductTable extends PowerGridComponent
{
    public function setUp(): array
    {
        return [
            PowerGrid::footer()
                ->pageName('productPage'),
        ];
    }
}
php
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid; 

class UserTable extends PowerGridComponent
{
    public function setUp(): array
    {
        return [
            PowerGrid::footer()
                ->pageName('userPage'),
        ];
    }
}
php
<div>
    <livewire:product-table />
    <livewire:user-table />
</div>

Custom Pagination Component โ€‹

Chain pagination() on PowerGrid::footer() and pass a view path. The view receives $perPage and $perPageValues.

phpapp/Livewire/ProductTable.php
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid; 

class ProductTable extends PowerGridComponent
{
    public function setUp(): array
    {
        return [
            PowerGrid::footer()
                ->showPerPage(25)
                ->showRecordCount()
                ->pagination(viewPath: 'components.pagination'),
        ];
    }
}

Created By Luan Freitas and @DanSysAnalyst