axllent / silverstripe-auto-delete
自动删除 Silverstripe 的 $has_one/$has_many 关联
0.0.1-beta2
2021-07-13 22:56 UTC
Requires
- silverstripe/assets: ^1.7.0
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