1. Come caricare eliminata in entità
Come per la documentazione, disattivare il filtro per l'entità responsabile:
$em->getFilters()->disable('softdeleteable');
$object = $em->find('AppBundle:Object', 1); // soft-deleted entity will be loaded
Per attivare soft-delete ancora:
$em->getFilters()->enable('softdeleteable');
Nota : $em->clear();
potrebbe essere richiesto prima di questa riga, se l'entità era già stata caricata con filtro soft-delete disabilitato.
2. Come rimuovere un'entità dal database interamente
Anche se non è menzionato nella documentazione, la prima soluzione non funziona se è necessario rimuovere entità e bypass filtro soft-delete. Filtro deve essere rimosso dal listener entità del gestore
// 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);
}
Riferimenti:
fonte
2016-07-05 08:13:22
Il filtro è solo una query dottrina quindi ha nessuna vera connessione al processo di lavaggio. Un modo molto più semplice per eliminare hard sarebbe quello di eseguire il '$ em-> remove ($ object); $ em-> flush ($ object); 'due volte. Il primo flush imposterà il 'deletedAt' per ora. Il secondo riconoscerebbe che il 'deletedAt' è stato impostato in precedenza e ignorerà effettivamente delete - ass che puoi vedere qui https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/SoftDeleteableListener.php# L63-L71. – qooplmao
@qooplmao Ho provato questo con l'ultimo tag (2.4.13) e non funziona. Forse solo con il master branch ora. –
@qooplmao Il tuo metodo funziona perfettamente. Penso che dovresti postarlo come risposta, perché alla fine ho ignorato la prima volta. La risposta di Aurelijus è informativa, ma in definitiva non necessaria. L'ho provato con v2.5.5. – aalaap