Eso es exactamente lo que hacen los soft deletes. Cuando «borras» un registro, no desaparece de verdad. Se va a una «papelera» invisible. Lo puedes recuperar cuando quieras. Pero si haces un «borrado permanente», entonces sí desaparece de la base de datos. ¡Es como tener una red de seguridad!
¿Por qué es importante esto?
Mira, imagina que trabajas en una tienda y accidentalmente borras al proveedor más importante. Sin soft deletes, ese dato se pierde para siempre. Con soft deletes, el registro sigue ahí, solo que «invisible». Lo puedes recuperar en segundos.
💡 Es como un botón de «deshacer» para tu base de datos.
Cómo funciona por dentro
Cuando activas soft deletes, Laravel agrega una columna llamada deleted_at a tu tabla. Cuando «borras» un registro, Laravel solo guarda la fecha en esa columna. El registro sigue existiendo, pero Laravel lo ignora en las consultas normales.
📊 Tu tabla con soft deletes:
| id | nombre | deleted_at | |
|---|---|---|---|
| 1 | Proveedor A | a@email.com | NULL (activo) |
| 2 | Proveedor B | b@email.com | 2024-01-15 (eliminado) |
👆 El Proveedor B sigue en la base de datos, solo que tiene fecha de eliminación
Lo que necesitas en tu código
Para que funcione, necesitas dos cosas: (1) la columna softDeletes() en tu migración, y (2) el trait SoftDeletes en tu modelo. Pero primero veamos el comando de Filament:
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: terminal (línea de comandos)
php artisan make:filament-resource Proveedor --soft-deletes
🔍 ¿Qué hace esta línea?
php artisan make:filament-resource Proveedor → El comando normal para crear un resource.
--soft-deletes → Le dice a Filament: «Configura todo para que los registros se puedan ‘borrar’ sin perderse». Crea filtros, botones de restaurar, y acciones de borrado permanente.
Lo que Filament configura automáticamente
Cuando usas --soft-deletes, Filament agrega varias cosas sin que tú hagas nada:
- 🔍 Filtro «Trashed»: Un dropdown para ver solo activos, solo eliminados, o todos
- ♻️ Botón Restaurar: Para traer un registro de vuelta de la papelera
- 🗑️ Borrado permanente: Para eliminar de verdad (sin recuperación)
Lo que tú necesitas agregar
Filament hace su parte, pero tú tienes que preparar tu tabla y modelo. En tu migración:
// En tu migración
Schema::create('proveedors', function (Blueprint $table) {
$table->id();
$table->string('nombre');
$table->timestamps();
$table->softDeletes(); // 👈 ESTO es lo que necesitas
});
// En tu modelo
use Illuminate\Database\Eloquent\SoftDeletes;
class Proveedor extends Model
{
use SoftDeletes; // 👈 Y ESTO también
}
📁 ¿Quieres ver cómo queda la tabla con soft deletes? (opcional)
Fíjate que Filament agrega automáticamente el filtro y las acciones:
📍 Archivo: app/Filament/Resources/Proveedors/Tables/ProveedorsTable.php
return $table
->columns([
TextColumn::make('nombre')->searchable(),
TextColumn::make('email')->searchable(),
])
->filters([
TrashedFilter::make(), // 👈 Filtro para ver eliminados
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(), // Soft delete
ForceDeleteBulkAction::make(), // Borrado permanente
RestoreBulkAction::make(), // Restaurar
]),
]);
El flujo de trabajo
Así funciona en la práctica:
- Usuario borra: El registro desaparece de la lista normal, pero sigue en la base de datos
- Usuario filtra «Eliminados»: Ve todos los registros en la papelera
- Usuario restaura: El registro vuelve a la lista normal
- O borra permanentemente: El registro desaparece para siempre de la base de datos
¡Pruébalo!
Crea un proveedor de prueba, luego elimínalo. Verifica que desaparece del listado. Ahora usa el filtro (un dropdown arriba de la tabla) y selecciona «Eliminados». ¿Aparece tu proveedor? Haz clic en «Restaurar» y mira cómo vuelve a la vida. ¡Así de útil es esto!
🎉 ¿Qué aprendimos hoy?
- Soft deletes = papelera de reciclaje para tu base de datos
--soft-deletesconfigura todo automáticamente en Filament- Necesitas
$table->softDeletes()en la migración yuse SoftDeletesen el modelo - El filtro
TrashedFilterpermite ver activos, eliminados o todos - Puedes restaurar registros «borrados» o eliminarlos permanentemente
- Es una red de seguridad que te salva de errores costosos
En la siguiente lección vamos a ver --view, que crea una página especial para ver los detalles de un registro sin editarlo. ¡Como una ficha de solo lectura! Nos vemos. 🚀