https://github.com/matfish2/eloquent-cascade
Cascading delete trait for Laravel's Eloquent
https://github.com/matfish2/eloquent-cascade
Last synced: 8 months ago
JSON representation
Cascading delete trait for Laravel's Eloquent
- Host: GitHub
- URL: https://github.com/matfish2/eloquent-cascade
- Owner: matfish2
- License: mit
- Created: 2016-01-25T20:22:17.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2016-08-11T15:20:38.000Z (almost 10 years ago)
- Last Synced: 2025-05-12T18:55:56.089Z (about 1 year ago)
- Language: PHP
- Homepage: https://packagist.org/packages/fish/eloquent-cascade
- Size: 10.7 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Laravel Eloquent Cascading Delete
[](https://packagist.org/packages/fish/eloquent-cascade) [](https://packagist.org/packages/fish/eloquent-cascade) [](https://packagist.org/packages/fish/eloquent-cascade) [](https://packagist.org/packages/fish/eloquent-cascade) [](https://travis-ci.org/matfish2/eloquent-cascade)
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
1. 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;
}
1. 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']);
}
}