askedio / laravel-soft-cascade
Laravel级联软删除与恢复
Requires
- php: ^8.2
- illuminate/container: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/events: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0|^11.0
- dev-master
- 11.0.0
- 10.0.x-dev
- 10.0.0
- 9.0.x-dev
- 9.0.0
- 8.1.0
- 8.0.x-dev
- 8.0.0
- 7.0.x-dev
- 7.0.2
- 7.0.1
- 7.0.0
- 6.0.x-dev
- 6.0.1
- 6.0.0
- 5.8.x-dev
- 5.8.0
- 5.7.x-dev
- 5.7.0
- 5.6.x-dev
- 5.6.5
- 5.6.4
- 5.6.3
- 5.6.2
- 5.6.1
- 5.6.0
- 5.5.x-dev
- 5.5.17
- 5.5.16
- 5.5.15
- 5.5.14
- 5.5.13
- 5.5.12
- 5.5.11
- 5.5.10
- 5.5.9
- 5.5.8
- 5.5.7
- 5.5.6
- 5.5.5
- 5.5.4
- 5.5.3
- 5.5.2
- 5.5.1
- 5.5.0
- 2.6
- 2.5
- 2.4
- 2.3
- 2.2
- 2.1
- 2.0
- 1.8
- 1.7
- 1.6
- 1.5
- 1.4
- 1.3
- 1.2
- 1.1
- 1.0
This package is auto-updated.
Last update: 2024-09-14 16:24:16 UTC
README
Laravel/Lumen软删除级联删除与恢复
当使用Laravel或Lumen的软删除功能时,实现级联删除和恢复。
为什么我需要它?
为了使软删除和恢复关系变得简单。
如果你喜欢像MySQL级联删除这样的功能,但想使用Laravel的SoftDeletes功能,你需要进行一些额外的步骤来确保你的关系被正确删除或恢复。
此包旨在用一个简单的数组替换这些步骤,该数组定义了你想要级联的关系。
安装
使用composer安装
composer require askedio/laravel-soft-cascade
从Laravel 5.5开始,可以充分利用自动发现服务提供者的功能。对于5.5之前的版本,你必须在你的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());
}
支持的数据库
- MySQL
- PostgreSQL
- SQLite
- SQL Server
测试
我编写了一些非常基本的测试,当然这里还需要做更多。如果你觉得这很有用,请通过测试其他数据库或编写更好的单元测试来帮助,因为我必须继续前进。
问题 & 贡献
我将在一个新的API中使用MySQL,所以与我使用相关的任何问题都将得到解决。如果你发现MySQL有任何问题,请报告并我会修复它。
如果你使用的是其他数据库并且有问题,请通过提交拉取请求来贡献。我没有时间测试其他数据库,但假设所有都会正常工作。