exls / laravel-cascade-soft-deletes
为实现了软删除的 Eloquent 模型提供级联队列删除或常规删除和恢复功能
1.0.2
2019-07-10 12:10 UTC
Requires
- php: >=5.4
- illuminate/database: ~5.8.0
- illuminate/events: ~5.8.0
Requires (Dev)
- phpunit/phpunit: ^4.8
This package is not auto-updated.
Last update: 2024-09-18 20:15:26 UTC
README
简介
在删除父记录时,您可能还想删除与之关联的任何详细信息/子记录,作为数据自我维护的一种形式。
通常,您会使用数据库的外键约束,在细节/子表的外键约束中添加 ON DELETE CASCADE
规则。
如果您需要在删除父记录后能够恢复它,请检查您是否可以访问 Laravel 的 软删除 功能。
但在此情况下,您可以使用数据库功能来级联删除细节。此软件包支持级联软删除功能,并支持队列以实现最后一步。
安装
通过 Composer 拉取此包。
composer require exls/laravel-soft-deletes
Laravel 5.* 集成
将服务提供程序添加到您的 config/app.php
文件中
'providers' => array( //register listeners on events Exls\LaravelCascadeSoftDeletes\Providers\CascadeSoftDeletesServiceProvider::class, ),
用法
将模型中的 SoftDeletes 特性更改为此包中的 CascadeSoftDeletes 特性
<?php namespace App\Models; use App\Models\Master\Detail; use Exls\LaravelCascadeSoftDeletes\Traits\CascadeSoftDeletes; use Illuminate\Database\Eloquent\Model; class Master extends Model { //Instead of SoftDeletes use CascadeSoftDeletes; //Remove immideately details protected $cascadeDeletes = ['details']; // or use queues to soft delete details protected $queuedCascadeDeletes = ['details']; protected $dates = ['deleted_at']; public function details() { return $this->hasMany(Detail::class); } }
现在您可以删除 App\Models\Master
记录,任何相关的 App\Models\Master\Detail
记录也将被删除。如果 App\Models\Master\Detail
记录也使用了 CascadeSoftDeletes
特性,那么它的详细信息/子记录也将被删除,依此类推。
App\Models\Master::findOrFail($masterId)->delete()
测试
联系
安东·帕夫洛夫