fish / eloquent-cascade
Cascading delete trait for Laravel's Eloquent
Installs: 2 058
Dependents: 1
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- php: >=5.4.0
- illuminate/support: ^4.2|>=5.0
Requires (Dev)
- illuminate/config: ^4.2|>=5.0
- illuminate/database: ^4.2|>=5.0
- orchestra/testbench: ^3.2
- phpunit/phpunit: ^5.1
This package is auto-updated.
Last update: 2024-10-20 04:27:49 UTC
README
This package offers a simple trait that leverages the Eloquent delete event to recursively delete all specified relations for a given model.
Installation
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
Usage
-
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']);
}
}