Row Grouping - Datatables for Laravel                  [               Datatables for Laravel  ](/) [ 1.0.5](https://laravel-datatables.com/release-notes "Click to view release notes")

  Toggle main menu         [Docs](https://laravel-datatables.com/docs) [Demos](/demos) [Blog](https://laravel-datatables.com/blog) [Pricing](/pricing)        Search  ⌘ K   [ Log in ](/login) 

  [Docs](https://laravel-datatables.com/docs) [Demos](/demos) [Blog](https://laravel-datatables.com/blog) [Pricing](/pricing) 

 Search docs and demos  

Type at least 2 characters to search.

    Docs     

### Getting Started

- [ Installation ](https://laravel-datatables.com/docs/start-installation)
- [ Manual Installation ](https://laravel-datatables.com/docs/start-manual-installation)
- [ Dark Mode ](https://laravel-datatables.com/docs/start-dark-mode)

### Basics

- [ Creating a Table ](https://laravel-datatables.com/docs/basic-creating-a-table)
- [ Displaying Columns ](https://laravel-datatables.com/docs/basic-displaying-columns)
- [ Data Sources ](https://laravel-datatables.com/docs/basic-data-sources)
- [ Internationalisation ](https://laravel-datatables.com/docs/basic-internationalisation)
- [ Styling ](https://laravel-datatables.com/docs/basic-styling)

### Features

- [ Accessibility ](https://laravel-datatables.com/docs/feature-accessibility)
- [ Aggregate Columns ](https://laravel-datatables.com/docs/feature-aggregate-columns)
- [ Bulk Actions ](https://laravel-datatables.com/docs/feature-bulk-actions)
- [ Column Reordering ](https://laravel-datatables.com/docs/feature-column-reordering)
- [ Column Visibility ](https://laravel-datatables.com/docs/feature-column-visibility)
- [ Custom Controls ](https://laravel-datatables.com/docs/feature-custom-controls)
- [ Custom Filters ](https://laravel-datatables.com/docs/feature-custom-filters)
- [ Exporting ](https://laravel-datatables.com/docs/feature-exporting)
- [ Freeze Columns and Headers ](https://laravel-datatables.com/docs/feature-freeze-columns-and-headers)
- [ Inline Editing ](https://laravel-datatables.com/docs/feature-inline-editing)
- [ Pagination ](https://laravel-datatables.com/docs/feature-pagination)
- [ Responsive Mobile ](https://laravel-datatables.com/docs/feature-responsive-mobile)
- [ Row Actions ](https://laravel-datatables.com/docs/feature-row-actions)
- [ Row Grouping ](https://laravel-datatables.com/docs/feature-row-grouping)
- [ Row Selection ](https://laravel-datatables.com/docs/feature-row-selection)
- [ Sorting and Searching ](https://laravel-datatables.com/docs/feature-sorting-and-searching)
- [ State Persistence ](https://laravel-datatables.com/docs/feature-state-persistence)
- [ Value Preparation ](https://laravel-datatables.com/docs/feature-value-preparation)

### Customization

- [ Cell Renderer ](https://laravel-datatables.com/docs/customization-cell-renderer)
- [ Columns ](https://laravel-datatables.com/docs/customization-columns)
- [ Components ](https://laravel-datatables.com/docs/customization-components)
- [ Data Sources ](https://laravel-datatables.com/docs/customization-data-sources)
- [ Exporting ](https://laravel-datatables.com/docs/customization-exporting)
- [ Filters ](https://laravel-datatables.com/docs/customization-filters)
- [ Loading Indicator ](https://laravel-datatables.com/docs/customization-loading-indicator)
- [ Multi Row Actions ](https://laravel-datatables.com/docs/customization-multi-row-actions)
- [ Pagination ](https://laravel-datatables.com/docs/customization-pagination)
- [ Row Actions ](https://laravel-datatables.com/docs/customization-row-actions)
- [ Sorting Icons ](https://laravel-datatables.com/docs/customization-sorting-icons)
- [ State Persistence ](https://laravel-datatables.com/docs/customization-state-persistence)
- [ Value Formatter ](https://laravel-datatables.com/docs/customization-value-formatter)

### Cell Renderer

- [ Action Buttons ](https://laravel-datatables.com/docs/renderer-action-buttons)
- [ Avatar ](https://laravel-datatables.com/docs/renderer-avatar)
- [ Checkmark ](https://laravel-datatables.com/docs/renderer-checkmark)
- [ Color Sample ](https://laravel-datatables.com/docs/renderer-color-sample)
- [ Email Link ](https://laravel-datatables.com/docs/renderer-email-to-link)
- [ External Link ](https://laravel-datatables.com/docs/renderer-external-link)
- [ Friendly Timestamp ](https://laravel-datatables.com/docs/renderer-friendly-timestamp)
- [ Image ](https://laravel-datatables.com/docs/renderer-image)
- [ Long Text ](https://laravel-datatables.com/docs/renderer-long-text)
- [ Phone Link ](https://laravel-datatables.com/docs/renderer-phone-link)
- [ Progress Bar ](https://laravel-datatables.com/docs/renderer-progress-bar)
- [ Status Badge ](https://laravel-datatables.com/docs/renderer-status-badge)
- [ URL Link ](https://laravel-datatables.com/docs/renderer-url-link)
- [ Wire Link ](https://laravel-datatables.com/docs/renderer-wire-link)

### Value Formatter

- [ Compact Number ](https://laravel-datatables.com/docs/formatter-compact-number)
- [ Currency ](https://laravel-datatables.com/docs/formatter-currency)
- [ Duration ](https://laravel-datatables.com/docs/formatter-duration)
- [ Friendly Filesize ](https://laravel-datatables.com/docs/formatter-friendly-filesize)
- [ Friendly Timestamp ](https://laravel-datatables.com/docs/formatter-friendly-timestamp)
- [ Locale Timestamp ](https://laravel-datatables.com/docs/formatter-locale-timestamp)
- [ Number ](https://laravel-datatables.com/docs/formatter-number)
- [ Percent ](https://laravel-datatables.com/docs/formatter-percent)

Row Grouping
============

Use $groupBy to organize the rows into groups. You can decide between PageSummary, GlobalTotals, and GroupPagination strategies, which are set through the $groupingStrategy property.

The column() method defines an on-the-fly column TotalPrice using a custom formatter called PrepareTotalPrice to evaluate its value and applies the aggregate() column configuration to keep a running total of the category group.

When you paginate along the table you will notice that the aggregation will automatically detect multiple currencies and provide separate totals for each currency in the group footer.

The PageSummary strategy shows every group with its records and a summary row calculated from the current page.

Switch to the GlobalTotals strategy to calculate totals for the entire filtered dataset, while keeping the rows paginated.

Switch to the GroupPagination strategy to add group-level pagination and expandable group controls. Each group is then collapsed behind a Show button, and the second switcher sets the $groupExpansionMode property: AllRows reveals every row of an expanded group, while PaginatedRows paginates them using $groupExpansionPerPage.

Choosing a Grouping Strategy
----------------------------

You can choose between page summaries, global totals, or group-pagination strategies based on your data volume and UX needs.

Grouping with prepared aggregate column

PHP

     `public array $groupBy = ['category'];public string $groupingStrategy = GroupingStrategy::PageSummary->value;public function columns(): array{    return [        Column::make('name', 'Product Name')->searchable()->sortable(),        Column::make('category', 'Category')->searchable()->sortable(),        Column::make('units_sold', 'Units Sold')->sortable()->aggregate(),        Column::make('price', 'Unit Price')            ->sortable()            ->format(new \MorrowIt\LaravelDatatable\Formatters\Currency(currencyCol: 'currency')),        Column::make('total_price', 'Total Price')            ->prepare(new \App\Support\Datatable\Formatters\PrepareTotalPrice())            ->format(new \MorrowIt\LaravelDatatable\Formatters\Currency(currencyCol: 'currency'))            ->aggregate(),    ];}` 

```
public array $groupBy = ['category'];
public string $groupingStrategy = GroupingStrategy::PageSummary->value;

public function columns(): array
{
    return [
        Column::make('name', 'Product Name')->searchable()->sortable(),
        Column::make('category', 'Category')->searchable()->sortable(),
        Column::make('units_sold', 'Units Sold')->sortable()->aggregate(),
        Column::make('price', 'Unit Price')
            ->sortable()
            ->format(new \MorrowIt\LaravelDatatable\Formatters\Currency(currencyCol: 'currency')),
        Column::make('total_price', 'Total Price')
            ->prepare(new \App\Support\Datatable\Formatters\PrepareTotalPrice())
            ->format(new \MorrowIt\LaravelDatatable\Formatters\Currency(currencyCol: 'currency'))
            ->aggregate(),
    ];
}
```

Strategy Modes
--------------

Page Summary: Aggregates are calculated from rows currently visible on the page.

Global Totals: Aggregates are calculated from the full filtered and searched dataset, while rows stay paginated.

Group Pagination: Pagination is applied to groups, and each group can be expanded with all rows or paginated rows.

Selecting a strategy

PHP

     `use MorrowIt\LaravelDatatable\Grouping\GroupingStrategy;use MorrowIt\LaravelDatatable\Grouping\GroupExpansionMode;public string $groupingStrategy = GroupingStrategy::GlobalTotals->value;public string $groupExpansionMode = GroupExpansionMode::PaginatedRows->value;public int $groupExpansionPerPage = 10;` 

```
use MorrowIt\LaravelDatatable\Grouping\GroupingStrategy;
use MorrowIt\LaravelDatatable\Grouping\GroupExpansionMode;

public string $groupingStrategy = GroupingStrategy::GlobalTotals->value;
public string $groupExpansionMode = GroupExpansionMode::PaginatedRows->value;
public int $groupExpansionPerPage = 10;
```

### Related Documentation

 [Aggregate Columns

Features

Display aggregate values for your columns.](https://laravel-datatables.com/docs/feature-aggregate-columns) [Value Preparation

Features

Transform column values before a formatter and renderer logic runs.](https://laravel-datatables.com/docs/feature-value-preparation) 

### Related Demos

 [Row Grouping

Features

Enable grouping of rows based on specific criteria.](https://laravel-datatables.com/demos/features-row-grouping) [Aggregate Totals

Features

Display aggregate totals for columns.](https://laravel-datatables.com/demos/features-aggregate-totals) 

   © 2026 Copyright (C)  [ Morrow IT Consulting &amp; Services ](https://morrow-it.services)  

 [Terms of Service](https://laravel-datatables.com/legal/terms) [Privacy](https://laravel-datatables.com/legal/privacy) [Legal Disclosure](https://laravel-datatables.com/legal/disclosure)
