touhidurabir / laravel-model-soft-cascade
一个用于处理模型关系级联删除和恢复的Laravel包。
Requires
- php: >=7.4
Requires (Dev)
- illuminate/database: ^8.62
- illuminate/events: ^8.62
- illuminate/support: ^8.62
- orchestra/testbench: ^6.21
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-17 11:17:16 UTC
README
一个用于处理模型关系级联删除和恢复的Laravel包。
此包不仅处理子模型在父模型软删除时的级联删除,还处理子模型记录在父模型恢复时的级联恢复。同时,它还可以处理强制删除,即强制删除父模型,所有子模型也将被强制删除。有关详细信息,请参阅配置文件。
安装
使用composer安装此包
composer require touhidurabir/laravel-model-soft-cascade
发布配置文件
php artisan vendor:publish --provider="Touhidurabir\ModelSoftCascade\ModelSoftCascadeServiceProvider" --tag=config
配置
配置文件 soft-cascade 包含大多数基本配置细节,例如对于哪些删除或恢复事件将调用级联功能,级联是否作为数据库事务操作运行,当模型被强制删除时的行为等。有关完整详细信息,请参阅配置文件。
请注意,尽管这些配置对于所有模型都是全局设置的,但仍然可以通过特定模型的方式覆盖它们。请参阅使用部分了解如何为特定模型设置特定配置,同时保持全局配置。
使用方法
要使用此包,只需在模型中使用 HasSoftCascade 特性并实现抽象方法 cascadable,该方法将返回一个 数组。
class User extends Model { use SoftDeletes; use HasSoftCascade; public function cascadable() : array { return [ 'profile', 'posts' ]; } public function profile() { return $this->hasOne('Touhidurabir\ModelSoftCascade\Tests\App\Profile'); } public function posts() { return $this->hasMany('Touhidurabir\ModelSoftCascade\Tests\App\Post'); } }
注意:请确保模型使用了 SoftDeletes 特性,否则将抛出异常。
默认情况下,cascadable 应返回一个包含我们想要应用级联行为的删除关系方法名称的数组。其余的配置将来自已发布的配置文件。但是,也可以在特定模型的方式上覆盖此配置。例如:
/** * The cascade custom configurations * * @return array */ public function cascadable() : array { return [ 'delete' => [ 'enable' => true, 'event' => 'deleted', 'relations' => [...], 'force' => true, ], 'restore' => [ 'enable' => true, 'event' => 'restored', 'relations' => ['comments'], ] ]; }
上面的示例显示了为特定模型设置的所有可能选项,以确定级联功能应如何为此特定模型工作。
上述示例的一个值得注意的情况是,通过遵循此特定模型配置,可以只为给定模型使用 delete 或 restore 级联行为。这是通过不设置 cascadable 返回数组的 delete 或 restore 键来实现的。例如,只为具有删除级联行为,如下所示:
/** * The cascade custom configurations * * @return array */ public function cascadable() : array { return [ 'delete' => [ 'enable' => true, 'event' => 'deleted', 'relations' => [...], 'force' => true, ] ]; }
贡献
欢迎提交拉取请求。对于重大更改,请首先提交一个问题以讨论您想要更改的内容。
请确保根据需要更新测试。