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.