cesargb/laravel-cascade-delete

在Laravel应用程序中实现多态关系的级联删除

1.8.0 2024-03-09 10:58 UTC

README

tests phpstan style-fix Quality Score Total Downloads

在Laravel应用程序中实现多态关系的级联删除

此包允许在Eloquent模型中使用特性,以便级联删除多态关系(MorphOneMorphManyMorphToMany)。

安装

此包可用于Laravel 5.5或更高版本。

您可以通过composer安装此包

composer require cesargb/laravel-cascade-delete

使用

在您的Eloquent模型中使用特性 Cesargb\Database\Support\CascadeDelete 并定义属性 cascadeDeleteMorph,它是一个字符串或数组,包含您定义的多态关系的方法。

代码示例

<?php

namespace App;

use App\Tag;
use App\Image;
use App\Option;
use Illuminate\Database\Eloquent\Model;
use Cesargb\Database\Support\CascadeDelete;

class Video extends Model
{
    use CascadeDelete;

    protected $cascadeDeleteMorph = ['image', 'tags', 'options'];

    public function image()
    {
        return $this->morphOne(Image::class, 'imageable');
    }

    public function options()
    {
        return $this->morphMany(Option::class, 'optionable');
    }

    public function tags()
    {
        return $this->morphToMany(Tag::class, 'taggable');
    }
}

现在您可以删除一个 App\Video 记录,并且任何关联的 App\ImageApp\OptionsApp\Tag 的pivot记录都将被删除。

删除残留数据

如果您批量删除具有多态关系的模型,您将会有未删除的残留数据。

为了清理这些垃圾数据,您有 deleteMorphResidual 方法。

示例

Video::query()->delete();

$video = new Video;

$video->deleteMorphResidual();

删除所有残留数据的命令

您可以使用Artisan命令 morph:clean 从所有使用 Cesargb\Database\Support\CascadeDelete 特性的模型中删除所有残留数据。

php artisan morph:clean

贡献

欢迎任何贡献。