Home

Awesome

Laravel pivot SoftDeletes for Laravel 5.8 to 11.x

Installation

Require this package with composer:

composer require ddzobov/laravel-pivot-softdeletes

Basic usage

use DDZobov\PivotSoftDeletes\Model;

class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class)->withSoftDeletes();
    }
}

class Tag extends Model
{
    public function posts()
    {
        return $this->belongsToMany(Post::class)->withSoftDeletes();
    }
}

Custom pivot model:

use DDZobov\PivotSoftDeletes\Model;
use DDZobov\PivotSoftDeletes\Relations\Pivot;

class Post extends Model
{
    public function tagsWithCustomPivot()
    {
        return $this->belongsToMany(Tag::class)->using(PostTag::class)->withSoftDeletes();
    }
}

class Tag extends Model
{
    public function postsWithCustomPivot()
    {
        return $this->belongsToMany(Post::class)->using(PostTag::class)->withSoftDeletes();
    }
}

class PostTag extends Pivot
{
    
}

Custom deleted_at field:

$this->belongsToMany(Post::class)->withSoftDeletes('custom_deleted_at');

Show without trashed (default behavior):

// withoutTrashed() already called inside withSoftDeletes()
$this->belongsToMany(Post::class)->withSoftDeletes();

// same behavior
$this->belongsToMany(Post::class)->withSoftDeletes()->withoutTrashedPivots();

Show exists & trashed:

$this->belongsToMany(Post::class)->withSoftDeletes()->withTrashedPivots();

Show only trashed:

$this->belongsToMany(Post::class)->withSoftDeletes()->onlyTrashedPivots();

Restore pivot recods:

$post->tags()->restore([$tag->id]);

Restore pivot recods (with custom pivot):

$post->tagsWithCustomPivot()->restore([$tag->id]);

Force detach pivot records:

$post->tags()->forceDetach([$tag->id]);

Sync with force detaching pivot records:

$post->tags()->syncWithForceDetaching([$tag->id]);

Testing

composer test

License

The MIT License (MIT). Please see License File for more information.