--- title: Delete action --- import UtilityInjection from "@components/UtilityInjection.astro" ## Introduction Filament includes an action that is able to delete Eloquent records. When the trigger button is clicked, a modal asks the user for confirmation. You may use it like so: ```php use Filament\Actions\DeleteAction; DeleteAction::make() ``` Or if you want to add it as a table bulk action, so that the user can choose which rows to delete, use `Filament\Actions\DeleteBulkAction`: ```php use Filament\Actions\DeleteBulkAction; use Filament\Tables\Table; public function table(Table $table): Table { return $table ->toolbarActions([ DeleteBulkAction::make(), ]); } ``` ## Redirecting after deleting You may set up a custom redirect when the record is deleted using the `successRedirectUrl()` method: ```php use Filament\Actions\DeleteAction; DeleteAction::make() ->successRedirectUrl(route('posts.list')) ``` As well as `$record`, the `successRedirectUrl()` function can inject various utilities as parameters. ## Customizing the delete notification When the record is successfully deleted, a notification is dispatched to the user, which indicates the success of their action. To customize the title of this notification, use the `successNotificationTitle()` method: ```php use Filament\Actions\DeleteAction; DeleteAction::make() ->successNotificationTitle('User deleted') ``` As well as allowing a static value, the `successNotificationTitle()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters. You may customize the entire notification using the `successNotification()` method: ```php use Filament\Actions\DeleteAction; use Filament\Notifications\Notification; DeleteAction::make() ->successNotification( Notification::make() ->success() ->title('User deleted') ->body('The user has been deleted successfully.'), ) ``` As well as allowing a static value, the `successNotification()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters. To disable the notification altogether, use the `successNotification(null)` method: ```php use Filament\Actions\DeleteAction; DeleteAction::make() ->successNotification(null) ``` ## Lifecycle hooks You can use the `before()` and `after()` methods to execute code before and after a record is deleted: ```php use Filament\Actions\DeleteAction; DeleteAction::make() ->before(function () { // ... }) ->after(function () { // ... }) ``` These hook functions can inject various utilities as parameters. ## Improving the performance of delete bulk actions By default, the `DeleteBulkAction` will load all Eloquent records into memory, before looping over them and deleting them one by one. If you are deleting a large number of records, you may want to use the `chunkSelectedRecords()` method to fetch a smaller number of records at a time. This will reduce the memory usage of your application: ```php use Filament\Actions\DeleteBulkAction; DeleteBulkAction::make() ->chunkSelectedRecords(250) ``` Filament loads Eloquent records into memory before deleting them for two reasons: - To allow individual records in the collection to be authorized with a model policy before deletion (using `authorizeIndividualRecords('delete')`, for example). - To ensure that model events are run when deleting records, such as the `deleting` and `deleted` events in a model observer. If you do not require individual record policy authorization and model events, you can use the `fetchSelectedRecords(false)` method, which will not fetch the records into memory before deleting them, and instead will delete them in a single query: ```php use Filament\Actions\DeleteBulkAction; DeleteBulkAction::make() ->fetchSelectedRecords(false) ```