1

我使用 SonataAdminBundle - 更具体地说是带有 Doctrine 的 SonataORMAdminBundle - 来做我的一些管理工作。到目前为止,这被证明是一个非常有用的 Bundle,但是,合理地删除实体有点棘手。

考虑一个 Tour 实体有一个 Truck 和一个 Trailer 实体,但是当 Truck 被丢弃时,它不应再出现在整个 Admin Application 中。尽管如此,可能仍然存在与这辆卡车有关的遗留旅游实体。

因此,当用户可能在管理员中编辑这样的旧版 Tour 时,不清楚如何解决这个问题,实体选择是否消失了?

我已经查看了 SoftDelete Extension Bundles,但它似乎需要做很多工作来调整所有特定情况。

Bundle Level 或 Doctrine in General 是否有一种简单的方法来解决这类问题?

4

1 回答 1

3

在奏鸣曲套件中需要时实现此行为的方式是通过实体中的新布尔字段:“启用”。然后我们在其上添加一个过滤器来显示或不显示它,并且从不实际删除使用中的对象。软删除是特定于客户端的操作(您可能有专门的业务规则),我们没有在 Sonata 套件中本地实现它。在这种情况下,您的实施应取决于您的需求。

然而,我们在 SonataDoctrineORMAdminBundle 中集成了 Simplethings ( https://github.com/simplethings/EntityAudit ) 的 EntityAuditBundle:每个具有 Admin 类的实体都会被自动审计。这允许跟踪对审计实体所做的每个编辑。(不一定是您要查找的内容,但可能仍然很有趣)。

最后,正如您所提到的,SoftDelete 可能会为您解决问题。但是您可能更愿意拥有自己的事件侦听器(例如使用 preRemove)并以自己的方式实现您的解决方案。

如果您认为您的解决方案可能值得集成到 SonataDoctrineORMAdminBundle 中,请随时在 github 上创建问题,我们将对其进行讨论。

于 2013-11-22T10:16:01.530 回答