The Laravel "soft delete" functionality is effectively managed through the use of this package. It works like trash in your system.
- You can install the package via composer:
composer require ajaycalicut17/laravel-trash
- Run migrations to create tables for this package:
php artisan migrate
- Check model is "soft delete" able, this package work by using laravel "soft delete" functionality:
<?php
namespace App\Models;
+ use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
+ use SoftDeletes;
}
- To enable this package for a model, add the Ajaycalicut17\LaravelTrash\Traits\Trashable trait to the Eloquent model:
<?php
namespace App\Models;
+ use Ajaycalicut17\LaravelTrash\Traits\Trashable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
+ use SoftDeletes, Trashable;
}
- To start listening "trashed" model event, define a $dispatchesEvents property on your Eloquent model:
<?php
namespace App\Models;
+ use Ajaycalicut17\LaravelTrash\Events\MoveToTrash;
use Ajaycalicut17\LaravelTrash\Traits\Trashable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use SoftDeletes, Trashable;
+
+ /**
+ * The event map for the model.
+ *
+ * @var array
+ */
+ protected $dispatchesEvents = [
+ 'trashed' => MoveToTrash::class,
+ ];
}
- To override the trash name (Optional):
<?php
namespace App\Models;
use Ajaycalicut17\LaravelTrash\Events\MoveToTrash;
use Ajaycalicut17\LaravelTrash\Traits\Trashable;
+ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use SoftDeletes, Trashable;
/**
* The event map for the model.
*
* @var array
*/
protected $dispatchesEvents = [
'trashed' => MoveToTrash::class,
];
+
+ public static function trashName(Model $model): string
+ {
+ return static::class.' '.$model->id;
+ }
}
- Publishing the config file (Optional):
php artisan vendor:publish --provider="Ajaycalicut17\LaravelTrash\LaravelTrashServiceProvider" --tag="config"
- To periodically delete the model from the trash, add model:prune Artisan command in your application's App\Console\Kernel class and change the config\trash.php pruning status to "true", you can also enter your pruning period here. (Optional):
+ use Ajaycalicut17\LaravelTrash\Models\Trash;
/**
* Define the application's command schedule.
*/
protected function schedule(Schedule $schedule): void
{
+ $schedule->command('model:prune', [
+ '--model' => Trash::class,
+ ])->daily();
}
- To get all trash model data:
Trash::all();
- To get all trash model and associated model data:
Trash::with('trashable')->get();
- To restore associated model form trash:
Trash::first()->restoreFromTrash();
- To delete trashed model and associated model:
Trash::first()->deleteFromTrash();
- To delete all trashed model and associated model:
Trash::emptyTrash();
composer test
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
The MIT License (MIT). Please see License File for more information.