Saltar al contenido principal

Action de eliminación

Introducción

Filament incluye una action que puede eliminar registros Eloquent. Cuando se hace clic en el botón de activación, un modal pide confirmación al usuario. Puedes usarla de esta manera:

use Filament\Actions\DeleteAction;

DeleteAction::make()

O si deseas agregarla como una action masiva de tabla, para que el usuario pueda elegir qué filas eliminar, usa Filament\Actions\DeleteBulkAction:

use Filament\Actions\DeleteBulkAction;
use Filament\Tables\Table;

public function table(Table $table): Table
{
return $table
->toolbarActions([
DeleteBulkAction::make(),
]);
}

Redirigir después de eliminar

Puedes configurar una redirección personalizada cuando se elimina el registro usando el método successRedirectUrl():

use Filament\Actions\DeleteAction;

DeleteAction::make()
->successRedirectUrl(route('posts.list'))
Información de inyección de utilidades

Además de $record, la función successRedirectUrl() puede inyectar varias utilidades como parámetros.

Personalizar la notificación de eliminación

Cuando el registro se elimina exitosamente, se envía una notificación al usuario, que indica el éxito de su acción.

Para personalizar el título de esta notificación, usa el método successNotificationTitle():

use Filament\Actions\DeleteAction;

DeleteAction::make()
->successNotificationTitle('User deleted')
Información de inyección de utilidades

Además de permitir un valor estático, el método successNotificationTitle() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

Puedes personalizar toda la notificación usando el método successNotification():

use Filament\Actions\DeleteAction;
use Filament\Notifications\Notification;

DeleteAction::make()
->successNotification(
Notification::make()
->success()
->title('User deleted')
->body('The user has been deleted successfully.'),
)
Información de inyección de utilidades

Además de permitir un valor estático, el método successNotification() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

Para deshabilitar la notificación por completo, usa el método successNotification(null):

use Filament\Actions\DeleteAction;

DeleteAction::make()
->successNotification(null)

Hooks de ciclo de vida

Puedes usar los métodos before() y after() para ejecutar código antes y después de que se elimine un registro:

use Filament\Actions\DeleteAction;

DeleteAction::make()
->before(function () {
// ...
})
->after(function () {
// ...
})
Información de inyección de utilidades

Estas funciones hook pueden inyectar varias utilidades como parámetros.

Mejorar el rendimiento de las actions de eliminación masiva

De forma predeterminada, el DeleteBulkAction cargará todos los registros Eloquent en memoria, antes de recorrerlos y eliminarlos uno por uno.

Si estás eliminando un gran número de registros, es posible que desees usar el método chunkSelectedRecords() para obtener un número menor de registros a la vez. Esto reducirá el uso de memoria de tu aplicación:

use Filament\Actions\DeleteBulkAction;

DeleteBulkAction::make()
->chunkSelectedRecords(250)

Filament carga los registros Eloquent en memoria antes de eliminarlos por dos razones:

  • Para permitir que los registros individuales en la colección sean autorizados con una policy de modelo antes de la eliminación (usando authorizeIndividualRecords('delete'), por ejemplo).
  • Para asegurar que los eventos del modelo se ejecuten al eliminar registros, como los eventos deleting y deleted en un observer de modelo.

Si no requieres autorización de policy de registros individuales y eventos de modelo, puedes usar el método fetchSelectedRecords(false), que no obtendrá los registros en memoria antes de eliminarlos, y en su lugar los eliminará en una sola consulta:

use Filament\Actions\DeleteBulkAction;

DeleteBulkAction::make()
->fetchSelectedRecords(false)