Symfony2,KnpLabs DoctrineBehaviors:如何真正删除可软删除的实体?
Symfony2, KnpLabs DoctrineBehaviors: How do I truly delete a softdeletable entity?
有没有一种方法可以通过控制器 KNPLabs DoctrineBehaviors 覆盖软删除行为?
在我的行动中,我希望能够暂时 "disable" 软删除行为,这样我就可以 真正从数据库中删除我的实体 而不是仅仅设置deletedAt
字段。
nifr 好心地在 Github 上给了我一个答案:
https://github.com/KnpLabs/DoctrineBehaviors/issues/294#issuecomment-190310921:
Quick 'n dirty:
$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
”,因为该服务不是 public.
要解决此问题,根据 nifr,有 2 种可能的解决方案:
1) 将您的控制器本身定义为服务并显式注入订户服务
2) 创建一个工厂服务,它将 return 订户服务并在您的控制器中调用该服务
有没有一种方法可以通过控制器 KNPLabs DoctrineBehaviors 覆盖软删除行为?
在我的行动中,我希望能够暂时 "disable" 软删除行为,这样我就可以 真正从数据库中删除我的实体 而不是仅仅设置deletedAt
字段。
nifr 好心地在 Github 上给了我一个答案: https://github.com/KnpLabs/DoctrineBehaviors/issues/294#issuecomment-190310921:
Quick 'n dirty:
$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
”,因为该服务不是 public.
要解决此问题,根据 nifr,有 2 种可能的解决方案:
1) 将您的控制器本身定义为服务并显式注入订户服务
2) 创建一个工厂服务,它将 return 订户服务并在您的控制器中调用该服务