| Package Data | |
|---|---|
| Maintainer Username: | matfish2 | 
| Maintainer Contact: | matfish2@gmail.com (Matanya Fishaimer) | 
| Package Create Date: | 2016-01-25 | 
| Package Last Update: | 2016-08-11 | 
| Home Page: | https://packagist.org/packages/fish/eloquent-cascade | 
| Language: | PHP | 
| License: | MIT | 
| Last Refreshed: | 2025-10-30 03:08:24 | 
| Package Statistics | |
|---|---|
| Total Downloads: | 2,059 | 
| Monthly Downloads: | 0 | 
| Daily Downloads: | 0 | 
| Total Stars: | 3 | 
| Total Watchers: | 1 | 
| Total Forks: | 1 | 
| Total Open Issues: | 0 | 
This package offers a simple trait that leverages the Eloquent delete event to recursively delete all specified relations for a given model.
Begin by installing this package through Composer. Edit your project's composer.json file to require fish/eloquent-cascade.
"require": {
  "fish/eloquent-cascade": "^1.0"
}
Next, update Composer from the Terminal:
composer update
Include the trait in a parent model and make the other models extend it:
 namespace App;
 use Illuminate\Database\Eloquent\Model;
 use Fish\Cascade\Cascade;
 class BaseModel extends Model
 {
     use Cascade;
 }
Add the relations you wish to delete to a protected $cascade array on the model. e.g:
 class User extends BaseModel
 {
     protected $cascade = ['author'];
     public function author() {
       return $this->hasOne(Author::class);
     }
 }
 class Author extends BaseModel
 {
     protected $cascade = ['posts'];
     public function user() {
       return $this->belongsTo(User::class);
     }
     public function posts() {
       return $this->hasMany(Post::class);
     }
 }
 class Post extends BaseModel
 {
   protected $cascade = ['comments'];
   public function comments() {
     return $this->hasMany(Comment::class);
   }
 }
If you are using a trait for polymorphic relations and want to add this relation to the $cascade array, override the protected getCascade method.
Suppose you have a Locale trait:
   trait Locale {
    public function locale() {
        return $this->morphMany(Locale::class, 'translatable');
    }
    protected function getCascade() {
      return array_merge($this->cascade, ['locale']);
    }
   }