Symfony2 / Doctrine: Lesen von "gelöschten" Daten bei Verwendung von Gedmos Doktrin-Erweiterungen

7

Ich baue ein Symfony2-Projekt und verwende gedmo/doctrine-extensions ( GitHub ), um das Löschen zu implementieren. Meine Frage ist, ob es eine Möglichkeit gibt, softdelete zu "deaktivieren" oder zu "überschreiben", oder sogar zu erkennen, ob etwas weich gelöscht wurde.

Hier ist die Situation:

Ich habe eine "Notiz" -Entität, die auf eine "Benutzer" -Entität verweist. Eine bestimmte Notiz verweist auf einen Benutzer, der gelöscht wurde. Obwohl der Benutzer gelöscht wurde, gibt er für die Logik "ist definiert" von TWIG den Wert true zurück und kann sogar die ID des gelöschten Benutzers zurückgeben. Wenn ich jedoch nach anderen Informationen frage (einschließlich des Parameters "deletedAt", der angibt, ob er gelöscht wurde oder nicht), erhalte ich den Fehler 500 "Entity wurde nicht gefunden".

Da die Daten tatsächlich immer noch da sind und die Notiz selbst nicht gelöscht wurde, möchte ich immer noch sagen, wer die Notiz geschrieben hat, obwohl der Benutzer gelöscht wurde.

Ist das möglich? Wenn nicht, wie erkenne ich richtig, ob etwas weich gelöscht wurde? Wie ich schon sagte, ruft $note->getUser() immer noch ein Objekt ab und gibt für alle Null / "ist definiert" Vergleiche wahr zurück.

    
Nathan Rutman 23.10.2013, 18:13
quelle

3 Antworten

6

Sie müssen das Laden der Beziehung auf eager einstellen. Dadurch wird das verzögerte Laden von Objekten mit nur id und sonst nichts verhindert.

Weitere Informationen zum Eager-Laden und seiner Anmerkung finden Sie hier:

Ссылка

Ссылка .

Wie für meinen Code sieht das so aus, wenn Sie einen Link zu einem User now jetzt definieren:

%Vor%

In diesem Fall kann die User -Einheit mehrere answers haben. Wenn Sie User aus der Perspektive answer laden, funktioniert dies:

%Vor%     
Oli 26.06.2014, 11:48
quelle
14

Sie können dies tun, indem Sie:

%Vor%     
trrrrrrm 04.12.2013 09:21
quelle
1

Sie können den Soft-Delete-Vorgang vorübergehend deaktivieren, sodass gelöschte Elemente in Ihren Ergebnissen zurückgegeben werden. Siehe Dokumentation , speziell interessant für Sie ist der Abschnitt, der lautet:

  

Dies wird den SoftDeleteable-Filter deaktivieren, also Entitäten, die   "soft-deleted" erscheint in den Ergebnissen   $ em- & gt; getFilters () - & gt; disable ('soft-deleteable');

Also, führe zuerst den obigen Code auf deinem Entity Manager $em aus und benutze ihn dann, um dein $note zu sammeln.

    
Nada_Surf 23.10.2013 19:12
quelle

Tags und Links