cesargb / laravel-cascade-delete
在Laravel应用程序中实现多态关系的级联删除
1.8.0
2024-03-09 10:58 UTC
Requires
- php: ^8.1
- illuminate/console: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/events: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- larastan/larastan: ^2.0
- laravel/legacy-factories: ^1.0.4
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^9.0|^10.5
README
在Laravel应用程序中实现多态关系的级联删除
此包允许在Eloquent模型中使用特性,以便级联删除多态关系(MorphOne
、MorphMany
或 MorphToMany
)。
安装
此包可用于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\Image
、App\Options
和 App\Tag
的pivot记录都将被删除。
删除残留数据
如果您批量删除具有多态关系的模型,您将会有未删除的残留数据。
为了清理这些垃圾数据,您有 deleteMorphResidual
方法。
示例
Video::query()->delete(); $video = new Video; $video->deleteMorphResidual();
删除所有残留数据的命令
您可以使用Artisan命令 morph:clean
从所有使用 Cesargb\Database\Support\CascadeDelete
特性的模型中删除所有残留数据。
php artisan morph:clean
贡献
欢迎任何贡献。