Actions &amp; Forms - Datatables for Laravel                  [               Datatables for Laravel  ](/) 

  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.

    Documentation menu      ### Getting Started

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

### Basics

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

### Customization

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

### Features

- [ Accessibility ](https://laravel-datatables.com/docs/feature-accessibility)
- [ Actions and Forms ](https://laravel-datatables.com/docs/actions-and-forms)
- [ Aggregate Columns ](https://laravel-datatables.com/docs/feature-aggregate-columns)
- [ Column Reordering ](https://laravel-datatables.com/docs/feature-column-reordering)
- [ Column Visibility ](https://laravel-datatables.com/docs/feature-column-visibility)
- [ Custom Filters ](https://laravel-datatables.com/docs/feature-custom-filters)
- [ Custom Controls ](https://laravel-datatables.com/docs/feature-custom-controls)
- [ Exporting ](https://laravel-datatables.com/docs/feature-exporting)
- [ Freeze Columns and Headers ](https://laravel-datatables.com/docs/feature-freeze-columns-and-headers)
- [ Pagination ](https://laravel-datatables.com/docs/feature-pagination)
- [ Responsive Mobile ](https://laravel-datatables.com/docs/feature-responsive-mobile)
- [ 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/sorting-and-searching)
- [ State Persistence ](https://laravel-datatables.com/docs/feature-state-persistence)
- [ Value Preparation ](https://laravel-datatables.com/docs/feature-value-preparation)

### 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)

  Actions &amp; Forms
===================

Use row actions, bulk actions, and inline editing hooks to turn a table into an interactive workflow surface.

1. Row Actions
--------------

Attach an action renderer and implement handleRowAction() in your datatable class.

 Row actions setup PHP     `Column::make('actions', __('Actions'))    ->functional()    ->renderer(new \MorrowIt\LaravelDatatable\Renderers\ActionButtons(variant: 'icon'));protected function handleRowAction(string $rowId, string $action): void{    if ($action === 'view') {        $this->redirectRoute('products.show', ['product' => $rowId]);        return;    }    if ($action === 'edit') {        $this->redirectRoute('products.edit', ['product' => $rowId]);        return;    }    if ($action === 'delete') {        // Delete/soft-delete flow.    }}` 

 ```
Column::make('actions', __('Actions'))
    ->functional()
    ->renderer(new \MorrowIt\LaravelDatatable\Renderers\ActionButtons(variant: 'icon'));

protected function handleRowAction(string $rowId, string $action): void
{
    if ($action === 'view') {
        $this->redirectRoute('products.show', ['product' => $rowId]);
        return;
    }

    if ($action === 'edit') {
        $this->redirectRoute('products.edit', ['product' => $rowId]);
        return;
    }

    if ($action === 'delete') {
        // Delete/soft-delete flow.
    }
}
```

2. Bulk Actions
---------------

Enable row selection, register bulk actions, then handle them in onBulkAction().

 Bulk actions setup PHP     `public bool $enableRowSelection = true;public array $bulkActions = [    'export-selected' => __('Export Selected'),    'archive-selected' => __('Archive Selected'),];protected function onBulkAction(string $action, array $selectedRows): void{    if ($action === 'export-selected') {        $this->export('csv');    }    if ($action === 'archive-selected') {        // Archive selected records.    }}` 

 ```
public bool $enableRowSelection = true;

public array $bulkActions = [
    'export-selected' => __('Export Selected'),
    'archive-selected' => __('Archive Selected'),
];

protected function onBulkAction(string $action, array $selectedRows): void
{
    if ($action === 'export-selected') {
        $this->export('csv');
    }

    if ($action === 'archive-selected') {
        // Archive selected records.
    }
}
```

Treat selected row IDs as untrusted input. Re-authorize and re-query rows server-side before mutating or exporting data.

3. Inline Editing
-----------------

Mark columns as editable() and persist updates in onCellUpdate().

 Inline edit hook PHP     `Column::make('name', __('Name'))->searchable()->sortable()->editable();Column::make('price', __('Price'))->sortable()->editable();protected function onCellUpdate($rowId, $columnKey, $value): void{    // Example: Product::query()->whereKey($rowId)->update([$columnKey => $value]);}` 

 ```
Column::make('name', __('Name'))->searchable()->sortable()->editable();
Column::make('price', __('Price'))->sortable()->editable();

protected function onCellUpdate($rowId, $columnKey, $value): void
{
    // Example: Product::query()->whereKey($rowId)->update([$columnKey => $value]);
}
```

Validate edited values and restrict which columns can be updated to avoid mass-assignment or unsafe field updates.

Reference
---------

Primary hooks and properties used by actions and forms:

    Member Purpose     `handleRowAction(string $rowId, string $action)` Handle single-row actions from action renderers.   `public bool $enableRowSelection` Enables row checkboxes and selection state.   `public array $bulkActions` Defines available bulk actions in the selection UI.   `onBulkAction(string $action, array $selectedRows)` Executes selected bulk operation.   `Column::editable()` Marks a column for inline edit mode.   `onCellUpdate($rowId, $columnKey, $value)` Persists edited cell values.    

 Related documentation

 [Customization: Row Actions](https://laravel-datatables.com/docs/customization-row-actions) [Customization: Multi Row Actions](https://laravel-datatables.com/docs/customization-multi-row-actions) 

   © 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)
