axllent/silverstripe-auto-delete

自动删除 Silverstripe 的 $has_one/$has_many 关联

安装: 13

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 0

类型:silverstripe-vendormodule

0.0.1-beta2 2021-07-13 22:56 UTC

This package is auto-updated.

Last update: 2024-09-14 06:24:34 UTC


README

实验性!!!

这是一个扩展功能,用于向 DataObjects 添加功能,以便

  • 当 $has_one 发生变化时(例如:上传新文件)删除未使用的 $has_one 关联。此功能不会直接从任何 Versioned DataObjects 中运行。
  • 当删除 DataObject 时,删除未使用的 $has_one$has_many 关联。

此扩展只会在对象未在其他地方使用时删除对象。

所有 DataObjects 都将获得两个新的附加功能,您可以将它们集成到其他事物中

  • inUse() - 用于检测对象是否在某个地方被使用。注意:它只能检测是否用于非版本化和已发布的关系。草稿和修改状态不会被检测!
  • deleteIfUnused() - 用于删除未在其他地方使用的 DataObject。如果正在删除的对象有一个 deleteFile() 方法,那么也会运行该方法(即:文件删除)。

用法

在您定义的 DataObject 中,添加一个 private static $auto_delete = [....]; 变量,定义要自动删除的哪些相关的 $has_one$has_many DataObjects,例如

class Slide extends DataObject {
    private static $db = [
        'Title' => 'Varchar(50)',
    ];

    private static $has_one = [
        'Image' => Image::class,
    ];

    /**
     * $has_one & $has_many auto-delete definitions
     *
     * @var array
     */
    private static $auto_delete = [
        'Image',
    ];
}

如果删除了 Slide,则此操作会自动删除未在其他地方使用的 Image,或者如果上传了新的 Image,则删除原始的 Image

注意

Auto-delete 不能递归删除 $has_many 对象,因为它只会在对象不再与其他任何 DataObject 链接时删除。如果您希望递归删除对象,则应通过 onBeforeDelete()'onAfterDelete() 手动执行。

要求

  • silverstripe/assets ^1.7.0 (Silverstripe 4)

通过 Composer 安装

您可以通过 composer 安装它,如下所示:

composer require axllent/silverstripe-auto-delete