Symfony2,KnpLabs DoctrineBehaviors:如何真正删除softdeletable实体?

时间:2016-02-28 12:53:30

标签: symfony doctrine-orm doctrine soft-delete

有没有办法用控制器覆盖KNPLabs DoctrineBehaviors的softdeletable行为?

在我的操作中,我希望能够暂时“禁用”softdeletable行为,以便真正从数据库中删除我的实体,而不是仅设置deletedAt字段。

1 个答案:

答案 0 :(得分:2)

nifr在Github上给了我一个答案: https://github.com/KnpLabs/DoctrineBehaviors/issues/294#issuecomment-190310921

  

快点肮脏:

$entityManager = $this->getDoctrine()->getManager('default');
$eventManager = $entityManager->getEventManager();

// remove the softdeletable subscriber
$subscriber = $this->get('knp.doctrine_behaviors.softdeletable_subscriber');
$eventManager->removeEventListener($subscriber->getSubscribedEvents(), $subscriber);

// remove entity while the subscriber is removed
$entityManager->remove($entity);
$entityManager->flush();

// add back the subscriber
$eventManager->addEventSubscriber($subscriber);

<强>问题 这会触发错误“you have requested a non-existent service”,因为该服务不公开。

根据nifr的说法,要解决这个问题,有两种可能的解决方案:

1)将您的控制器本身定义为服务并明确注入订户服务 2)创建一个工厂服务,该服务将返回订户服务并在您的控制器中调用该服务