PHPackages                             helgesverre/laravel-prunekeeper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. helgesverre/laravel-prunekeeper

ActiveLibrary[Database &amp; ORM](/categories/database)

helgesverre/laravel-prunekeeper
===============================

Archive prunable Eloquent records before deletion

v2.0.0(5mo ago)20MITPHPPHP ^8.2CI failing

Since Dec 6Pushed 5mo agoCompare

[ Source](https://github.com/HelgeSverre/laravel-prunekeeper)[ Packagist](https://packagist.org/packages/helgesverre/laravel-prunekeeper)[ Docs](https://github.com/HelgeSverre/laravel-prunekeeper)[ RSS](/packages/helgesverre-laravel-prunekeeper/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (12)Versions (3)Used By (0)

Prunekeeper
===========

[](#prunekeeper)

**Archive prunable Eloquent records before deletion.**

[![Latest Version on Packagist](https://camo.githubusercontent.com/b5073e55252b8664b230dcfd2ee07742e58557d7717c766c6b8b93f938516ee0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f68656c67657376657272652f6c61726176656c2d7072756e656b65657065722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/helgesverre/laravel-prunekeeper)[![Total Downloads](https://camo.githubusercontent.com/b4df1d2b2358f1824eecbf1db8dc715126edf6d80763607da74613d3c9bef8c7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f68656c67657376657272652f6c61726176656c2d7072756e656b65657065722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/helgesverre/laravel-prunekeeper)[![License](https://camo.githubusercontent.com/56e746023a7d515ea9456efaa2872decc3d0dc21783a8abb81f15e86d8413dd4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f68656c67657376657272652f6c61726176656c2d7072756e656b65657065722e7376673f7374796c653d666c61742d73717561726526763d32)](https://packagist.org/packages/helgesverre/laravel-prunekeeper)

[![Prunekeeper](art/header.png)](art/header.png)

---

Laravel's `Prunable` trait lets you automatically clean up old database records.
 But once they're gone, they're gone forever.

Prunekeeper hooks into Laravel's pruning process to export records to CSV or SQL before deletion. Archives are compressed and uploaded to any Laravel filesystem disk (S3, local, etc.), giving you a safety net for compliance, auditing, or "just in case."

```
class Flight extends Model
{
    use Prunable;
    use ArchivePrunedRecords; // Add this trait

    public function prunable(): Builder
    {
        return static::where('created_at', 'subMonth());
    }
}
```

That's it. When Laravel prunes the model, Prunekeeper archives the records first.

### Using with MassPrunable

[](#using-with-massprunable)

Works the same way with `MassPrunable` (bulk deletion without model events):

```
use Illuminate\Database\Eloquent\MassPrunable;
use HelgeSverre\Prunekeeper\ArchivePrunedRecords;

class Flight extends Model
{
    use MassPrunable;
    use ArchivePrunedRecords;

    public function prunable(): Builder
    {
        return static::where('created_at', '
