touhidurabir/laravel-model-soft-cascade

一个用于处理模型关系级联删除和恢复的Laravel包。

1.0.1 2021-10-14 06:59 UTC

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'],
        ]
    ];
}

上面的示例显示了为特定模型设置的所有可能选项,以确定级联功能应如何为此特定模型工作。

上述示例的一个值得注意的情况是,通过遵循此特定模型配置,可以只为给定模型使用 deleterestore 级联行为。这是通过不设置 cascadable 返回数组的 deleterestore 键来实现的。例如,只为具有删除级联行为,如下所示:

/**
 * The cascade custom configurations
 *
 * @return array
 */
public function cascadable() : array  {

    return [
        'delete' => [
            'enable'    => true,
            'event'     => 'deleted',
            'relations' => [...],
            'force'     => true,
        ]
    ];
}

贡献

欢迎提交拉取请求。对于重大更改,请首先提交一个问题以讨论您想要更改的内容。

请确保根据需要更新测试。

许可证

MIT