SoftDelete,关系和SonataORMAdminBundle

时间:2013-11-18 20:32:20

标签: php symfony doctrine-orm sonata-admin soft-delete

我正在使用SonataAdminBundle - 更具体地说是使用Doctrine的SonataORMAdminBundle - 来完成我的一些管理工作。到目前为止,这被证明是一个非常有用的Bundle,但是对实体进行有意义的删除有点棘手。

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

所以当用户可能在管理员中编辑这样的遗产之旅时,目前还不清楚如何解决这个问题,实体选择是否已经消失?

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

在Bundle Level或General的Doctrine中是否有一个简单的方法可以解决这些问题?

1 个答案:

答案 0 :(得分:3)

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

然而,我们在SonataDoctrineORMAdminBundle中集成了Simplethings(https://github.com/simplethings/EntityAudit)中的EntityAuditBundle:每个具有Admin类的实体都会自动审核。这允许跟踪在审计实体上完成的每个编辑。 (不一定是你想要的,但可能会很有趣)。

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

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