-
Cascade Soft Delete for Relations
Soft delete related records automatically when a parent is soft deleted. -
Cascade Restore for Relations
Automatically restore related models if theirdeleted_atis later than or equal to the parent's restore date. -
Custom Query Support
Use a custom query to control cascade actions. -
Configurable Queue Behavior
All cascade actions are queued by default. This behavior can be customized by publishing and editing the package's config file.
Note:
This package is based on Laravel Cascaded Soft Deletes (original, no longer maintained).
You can install the package via composer:
composer require assettv/laravel-cascaded-soft-deletesYou can publish the config file with:
php artisan vendor:publish --tag="laravel-cascaded-soft-deletes-config"To set up CascadedSoftDeletes, you need to use the trait on the parent model and define $cascadedSoftDeletes property or getCascadedSoftDeletes() method.
<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use AssetTV\LaravelCascadedSoftDeletes\Traits\CascadedSoftDeletes;
class Page extends Model {
use SoftDeletes;
use CascadedSoftDeletes;
protected $cascadedSoftDeletes = [ 'blocks' ];
public function blocks()
{
return $this->hasMany(Block::class);
}
}<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Block extends Model {
use SoftDeletes;
public function page()
{
return $this->belongsTo(Page::class);
}
}You can also define a custom query to cascade soft deletes and restores through.
The following example describes a scenario where Folder is a model that uses NodeTrait from laravel-nestedset class and each folder has many albums. getCascadedSoftDeletes() in the example will cascade soft deletes and restores to albums related to the folder and all its descendants.
<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use AssetTV\LaravelCascadedSoftDeletes\Traits\CascadedSoftDeletes;
class Folder extends Model {
use SoftDeletes;
use NodeTrait;
use CascadedSoftDeletes;
public function albums()
{
return $this->hasMany(Album::class);
}
protected function getCascadedSoftDeletes()
{
return [
'albums' => function() {
return Album::whereHas('folder', function($q) {
$q->withTrashed()
->where('_lft', '>=', $this->getLft())
->where('_rgt', '<=', $this->getRgt());
});
}
];
}
}- Both classes must use SoftDeletes trait.
- Parent class must use CascadedSoftDeletes trait.
- Parent class must define
$cascadedSoftDeletesor implementgetCascadedSoftDeletesmethod which must return a list of cascaded HasMany relations and/or custom queries.
composer test