Eliminar información en un sistema puede parecer algo simple, pero en aplicaciones reales —como ecommerce, sistemas administrativos o ERP. Borrar datos definitivamente puede generar pérdidas importantes. Laravel ofrece una solución profesional llamada Soft Deletes, que permite eliminar registros sin perderlos realmente.
En este artículo aprenderás qué son los Soft Deletes, cómo funcionan, sus ventajas, desventajas y cuándo deberías utilizarlos en tus proyectos Laravel.

¿Qué Son los Soft Deletes en Laravel?
Los Soft Deletes permiten marcar un registro como eliminado sin borrarlo físicamente de la base de datos.
Cuando usas Soft Deletes, Laravel no elimina el registro con DELETE. En su lugar, llena una columna llamada deleted_at con la fecha y hora de eliminación.
- Si el campo tiene valor → el registro está eliminado.
- Si es NULL → el registro sigue activo.
Esto permite recuperar datos fácilmente y mantener historial dentro del sistema.
¿Cómo Funcionan los Soft Deletes?
Laravel maneja automáticamente los registros eliminados mediante Eloquent.
Primero debes agregar la columna deleted_at en tu migración.
Migración
Schema::table('products', function (Blueprint $table) {
$table->softDeletes();
});Luego activas Soft Deletes en el modelo.
Modelo Laravel
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Product extends Model
{
use SoftDeletes;
}Ahora cuando elimines un registro:
Product::find(1)->delete();Laravel ejecutará algo equivalente a:
UPDATE products SET deleted_at = NOW() WHERE id = 10;Consultas con Soft Deletes
Laravel oculta automáticamente los registros eliminados para mantener consultas limpias.
Obtener solo registros activos
Product::all();Laravel automáticamente aplica:
WHERE deleted_at IS NULLObtener eliminados
Product::onlyTrashed()->get();Obtener todos (incluyendo eliminados)
Product::withTrashed()->get();Cómo Restaurar un Registro Eliminado
Una de las mayores ventajas es poder recuperar información fácilmente.
Product::withTrashed()->find(1)->restore();Esto vuelve a colocar:
deleted_at = NULLEl registro vuelve a estar activo.
Eliminar Definitivamente un Registro
En algunos casos sí necesitas borrar datos permanentemente.
Product::find(1)->forceDelete();Aquí Laravel sí ejecuta un DELETE real en la base de datos.
Ventajas y Desventajas de Soft Deletes en Laravel
Antes de implementarlos es importante conocer cuándo ayudan y cuándo pueden afectar el rendimiento.
| Ventajas | Desventajas |
|---|---|
| Permite recuperar registros eliminados | Las tablas crecen más rápido |
| Evita pérdida accidental de datos | Consultas complejas pueden olvidar filtrar eliminados |
| Ideal para auditorías e historial | Puede afectar rendimiento en tablas muy grandes |
| Mantiene relaciones entre tablas | Mayor uso de almacenamiento |
| Permite crear papelera de reciclaje | Requiere mantenimiento periódico |
Problema Común con Soft Deletes (Y Su Solución)
Uno de los errores más frecuentes ocurre en consultas personalizadas.
Problema
Cuando usas Query Builder directamente:
DB::table('products')->get();Aquí Laravel NO filtra los eliminados.
Esto puede mostrar productos borrados.
Solución recomendada
Filtrar manualmente:
DB::table('products')
->whereNull('deleted_at')
->get();O preferir Eloquent:
Product::get();Cuándo Deberías Usar Soft Deletes
No todos los sistemas necesitan esta funcionalidad.
Son ideales para:
- Ecommerce (productos, pedidos, clientes).
- Sistemas contables.
- Historial de ventas.
- Gestión de usuarios.
- Inventarios.
- Sistemas administrativos.
Especialmente cuando los datos tienen valor histórico.
Cuándo NO Usar Soft Deletes
En algunos casos eliminar definitivamente es mejor.
Evítalos en:
- Tablas temporales.
- Logs masivos.
- Caché o sesiones.
- Datos que se generan constantemente.
En estos casos el crecimiento de la tabla puede afectar el rendimiento.
Buenas Prácticas al Usar Soft Deletes
Aplicar buenas prácticas evita problemas de rendimiento a largo plazo.
- Crear índices en
deleted_at. - Limpiar registros antiguos periódicamente.
- Usar
forceDelete()en datos innecesarios. - Evitar
joinsinnecesarios con registros eliminados. - Usar
Eloquentcuando sea posible.
Ejemplo de índice:
$table->index('deleted_at');Conclusión
Los Soft Deletes en Laravel son una herramienta esencial en sistemas profesionales donde la información no debe perderse fácilmente. Permiten recuperar registros, mantener historial y evitar errores humanos al eliminar datos.
Sin embargo, deben usarse correctamente, ya que en proyectos grandes pueden afectar el rendimiento si no se gestionan adecuadamente. Implementarlos con buenas prácticas hará que tu aplicación sea más segura, escalable y confiable.
