exls/laravel-cascade-soft-deletes

为实现了软删除的 Eloquent 模型提供级联队列删除或常规删除和恢复功能

1.0.2 2019-07-10 12:10 UTC

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()

测试

联系

安东·帕夫洛夫