Since Laravel 8.5 there was a trait added to the framework that will allow you to prune models based on a date. This
trait is called Illuminate\Database\Eloquent\Prunable and it will allow you to prune models based on a date.
This trait is useful when you have models that you want to delete based on a date. For example, you might have a model
that stores logs and you want to delete logs that are older than a certain date.
In this article, we're going to look at how you can create a trait that will allow you to prune models based on a date.
Using the Prunable Trait
To use the Prunable trait you need to add it to your model and define a prunable method that will return a query
builder instance. This query builder instance will be used to prune the models based on a date.
Here's an example of how you can use the Prunable trait in a model:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Prunable;
class Log extends Model
{
    use Prunable;
    public function prunable()
    {
        return $this->where('created_at', '<', now()->subDays(30));
    }
}
In this example, we have a Log model that uses the Prunable trait. We have defined a prunable method that returns
a query builder instance that will delete logs that are older than 30 days.
Schedule Pruning
To prune the models you need to schedule the pruning to run at a certain time. You can do this by adding a command
to your routes/console.php file that will call the prune method on the model.
Here's an example of how you can schedule the pruning of the Log model:
<?php
use Illuminate\Support\Facades\Schedule;
Schedule::command('model:prune')->daily();
In this example, we're scheduling the model:prune command to run daily. This command will call the prune method
on the Log model and delete logs that are older than 30 days.
 
 
    
Top comments (0)