I'm currently organising Full Stack Europe. It's a conference in Antwerp, Belgium for developers who want to learn across the stack. You can use this link get your ticket with a nice discount.

A Laravel package to clean up models

Original – by Freek Van der Herten – 1 minute read

Most databases will contain some records that must be cleaned up. The reasons why a record can become unneeded are diverse:

  • maybe it's a temporary record that was only needed for a little while
  • if you're logging stuff to a table, a record may become too old to be of interest anymore
  • ...
To help a Laravel app delete such records our intern Jolita coded up a package called laravel-model-cleaner. Models containing unneeded records can implement the provided `GetsCleanedUp`-interface. Here's an example:
use Spatie\ModelCleanup\GetsCleanedUp;
use Illuminate\Database\Eloquent\Builder;
use Carbon\Carbon;

class LogItem extends Model implements GetsCleanedUp
{
    ...

     public static function cleanUp(Builder $query) : Builder
     {
        //delete up all records older than a year
        return $query->where('created_at', '<', Carbon::now()->subYear());
     }
}

In the configuration file you can specify the directory containing your models. The package will automatically detect all classes that implement the GetsCleanedUp-interface in that directory.

When firing the clean:models artisan command all records selected by the cleanUp-function will be deleted. Of course you can schedule that command to automate the cleanup process.

Take a look at the package on GitHub. Our other Laravel packages are listed on our company website.

Stay up to date with all things Laravel, PHP, and JavaScript.

Every two weeks I send out a newsletter containing lots of interesting stuff for the modern PHP developer.

Expect quick tips & tricks, interesting tutorials, opinions and packages. Because I work with Laravel every day there is an emphasis on that framework.

Rest assured that I will only use your email address to send you the newsletter and will not use it for any other purposes.