Mantén tu Base de Datos Limpia con el Trait Prunable en Laravel

Cuando desarrollas aplicaciones, es normal que, con el tiempo, tu base de datos comience a llenarse de registros innecesarios o desactualizados. Estos datos no solo consumen espacio, sino que también pueden llegar a afectar el rendimiento general de tu sistema.

Una solución común podría ser crear un comando de Artisan, programarlo en un scheduler y escribir la lógica para eliminar esos registros. Sin embargo, Laravel simplifica este proceso con el trait Prunable.

¿Qué es el Trait Prunable?

Prunable es un trait que puedes incluir en tus modelos Eloquent para definir qué registros deben ser eliminados. Con este trait, puedes:

  • Definir la lógica para identificar registros obsoletos.

  • Ejecutar eliminaciones manuales o programadas.

  • Personalizar la eliminación según las necesidades de tu aplicación.

Implementación Paso a Paso

1. Incluir el Trait en un Modelo

Para comenzar, debemos agregar el trait Prunable al modelo que deseas limpiar automáticamente.

Este trait se encuentra en:

use Illuminate\Database\Eloquent\Prunable;

Para poder definir nuestra lógica, lo que tenemos que hacer es sobreescribir el método llamado prunable que se encuentra dentro del trait, Este método debe devolver una instancia de Builder, es decir, una query que especifique los registros que deseas eliminar.

Por ejemplo, si quieres eliminar los registros creados hace más de 6 meses, el código quedaría así:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Prunable;

class ActiviyLog extends Model
{
    use Prunable;

    public function prunable()
    {
        return static::where('created_at', '<', now()->subMonths(6));
    }
}

Y listo con esto ahora lo único que necesitamos hacer seria ejecutar el comando php artisan model:prune y esto automáticamente checaria los modelos con este trait y eliminaría los registros obsoletos.

Ahora, si quisieramos automatizar esto, bastaria con agregar una linea en el archivo kernel.php, para programar la ejecución del comando model:prune.

protected function schedule(Schedule $schedule)
{
    $schedule->command('model:prune')->daily();
}

y con esto el comando se ejecutará en el intervalo que definas, y así mantendremos nuestra base de datos limpia de registros no deseados, incluso si estás usando soft deletes.

Conclusión: Laravel no solo simplifica el desarrollo con herramientas como el trait Prunable, sino que también demuestra por qué es uno de los frameworks más queridos en el mundo del desarrollo web. 🚀❤️