How to disable soft delete (Soft-deletedable) filter for doctrine in symfony

Installing and using the SoftDeleteable extension for Doctrine 2 is quite simple. Usually the problem is to disable it for part of the code and enable it again. You can do this to:

  • load an object that is soft-deleted
  • delete an object from the database completely bypassing the soft-delete filter

So how to disable it?

+6
symfony doctrine2 soft-delete
source share
1 answer

1. How to load an object with soft remoteness

According to the documentation, disable the filter for entity manager:

$em->getFilters()->disable('softdeleteable'); $object = $em->find('AppBundle:Object', 1); // soft-deleted entity will be loaded 

To enable soft-delete again:

 $em->getFilters()->enable('softdeleteable'); 

Note: $em->clear(); may be required before this line $em->clear(); if the object is already loaded with the disabled soft-delete filter.

2. How to completely remove an object from the database

Despite the fact that the documentation is not mentioned, the first solution does not work if you need to delete an object and bypass the soft-delete filter. The filter must be removed from the object manager event listeners:

 // initiate an array for the removed listeners $originalEventListeners = []; // cycle through all registered event listeners foreach ($em->getEventManager()->getListeners() as $eventName => $listeners) { foreach ($listeners as $listener) { if ($listener instanceof \Gedmo\SoftDeleteable\SoftDeleteableListener) { // store the event listener, that gets removed $originalEventListeners[$eventName] = $listener; // remove the SoftDeletableSubscriber event listener $em->getEventManager()->removeEventListener($eventName, $listener); } } } // remove the entity $em->remove($object); $em->flush($object); // or $em->flush(); // re-add the removed listener back to the event-manager foreach ($originalEventListeners as $eventName => $listener) { $em->getEventManager()->addEventListener($eventName, $listener); } 

Literature:

+13
source share

All Articles