1. Wie soft-deleted Einheit
Gemäß der Dokumentation laden, deaktivieren Sie Filter für Manager Einheit:
$em->getFilters()->disable('softdeleteable');
$object = $em->find('AppBundle:Object', 1); // soft-deleted entity will be loaded
Damit Soft wieder löschen:
$em->getFilters()->enable('softdeleteable');
Hinweis : $em->clear();
ist möglicherweise vor dieser Zeile erforderlich, wenn die Entität bereits mit deaktiviertem Filter zum Löschen von Dateien geladen wurde.
2. Wie Unternehmen aus der Datenbank
entfernen völlig
Auch wenn es nicht in der Dokumentation erwähnt wird, ist die erste Lösung nicht, wenn Sie Unternehmen und Bypass-Soft-Löschfilter entfernen müssen. Filter muss von Entity Manager des Event-Listener entfernt werden:
// 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);
}
Referenzen:
Der Filter ist nur eine Lehre Abfrage so hat es keine echte Verbindung zum Spülvorgang. Ein viel einfacherer Weg zum Harddelete wäre das Ausführen des $ em-> remove ($ object); $ em-> flush ($ object); 'zweimal. Der erste Flush würde den 'deletedAt' auf jetzt setzen. Die zweite würde erkennen, dass die "deletedAt" zuvor festgelegt wurde und ignorieren tatsächlich löschen - ass Sie hier sehen können https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/SoftDeleteableListener.php# L63-L71. – qooplmao
@qooplmao Ich versuchte dies mit dem neuesten Tag (2.4.13) und es funktioniert nicht. Vielleicht nur mit Master-Zweig jetzt. –
@qooplmao Ihre Methode funktioniert perfekt. Ich denke, du solltest es als Antwort posten, da ich es das erste Mal ignoriert habe. Aurelijus 'Antwort ist informativ, aber letztlich unnötig. Ich habe es mit v2.5.5 versucht. – aalaap