sivanandaperumal/laravel-soft-cascade

此包的最新版本(6.0)没有可用的许可证信息。

Laravel级联软删除与恢复

6.0 2020-02-04 10:15 UTC

README

Header

Build Status Codacy Badge Codacy Badge StyleCI Badge

Laravel/Lumen 软删除级联与恢复

使用 Laravel 或 Lumen SoftDeletes 功能时进行级联删除和恢复。

为什么我需要它?

为了使软删除和恢复关系变得简单。

如果您喜欢像 MySQL 级联删除这样的功能,但想使用 Laravel 的 SoftDeletes 功能,您需要执行一些额外步骤以确保您的关联关系被正确删除或恢复。

此包旨在用一个定义您想要级联的关联的简单数组来替换这些步骤。

安装

使用 composer 安装

composer require askedio/laravel-soft-cascade

从 Laravel 5.5 开始,可以利用自动发现服务提供者的功能。对于 5.5 版本之前的 Laravel,您必须在您的 config/app.php 中注册服务提供者。

Askedio\SoftCascade\Providers\GenericServiceProvider::class,

Lumen 不支持自动发现功能,您应该手动添加提供者。

Askedio\SoftCascade\Providers\LumenServiceProvider::class,

用法

在您的 Model 中启用特质并定义 $softCascade示例

use \Askedio\SoftCascade\Traits\SoftCascadeTrait;

protected $softCascade = ['profiles'];

对于受限制的关联使用。 示例

use \Askedio\SoftCascade\Traits\SoftCascadeTrait;

protected $softCascade = ['addresses@restrict'];

$softCascade 是您关联名称的数组,在 示例 中,您会看到我们为关联定义了 function profiles()

嵌套关联通过在相关 Model 中定义 $softCascade 来实现,您可以在此处看到 示例

在定义了您的关联后,您只需在您的 Model 上触发 delete()restore() 即可,您的关联将执行相同的任务。

User::first()->delete();
User::withTrashed()->first()->restore();

它还可以用这种方式与查询构建器一起使用,因为查询构建器监听器是在查询之后执行的,由于受限制的关联,我们需要使用事务来回滚错误时的查询

try {
    DB::beginTransaction(); //Start db transaction for rollback query when error
    User::limit(2)->delete();
	User::withTrashed()->limit(2)->restore();
    DB::commit(); //Commit the query
} catch (\Exception $e) {
    DB::rollBack(); //Rollback the query
    //Optional, if we need to continue execution only rollback transaction and save message on variable
    throw new \Askedio\SoftCascade\Exceptions\SoftCascadeLogicException($e->getMessage()); 
}

支持的 PHP 版本

  • >=7.1.13

支持的数据库

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server

测试

我已经编写了一些非常基本的测试,当然这里还需要做更多。如果您认为这很有用,请通过测试其他数据库或编写更好的单元测试来帮助,因为我必须继续前进。

问题 & 贡献

我将使用此工具与 MySQL 在一个新的 API 中,因此我发现的与我使用相关的任何问题都将得到解决。如果您发现 MySQL 中存在问题,请报告问题,我将修复它。

如果您使用的是其他数据库并遇到问题,请通过提交拉取请求来贡献。我没有时间测试其他数据库,但假设所有数据库都可以正常工作。