Does Propel wissen, wenn ein Objekt weich gelöscht wurde, so dass untergeordnete Entitäten noch ihre gelöschten Eltern zeigen konnte?

StackOverflow https://stackoverflow.com/questions/2519297

  •  22-09-2019
  •  | 
  •  

Frage

Ich bin Soft-Löschen von Objekten in einer MySQL-Datenbank und die Propel ORM. Ich habe Soft-Löschung zu Arbeit bekommen, aber auf Kosten meine erzwungenen Eltern-Kind-Beziehungen zu verlieren, da die tatsächlichen Zeilen nicht gelöscht werden.

Gibt es eine Möglichkeit für Propel zu wissen, dass ein Datensatz wurde weich gelöscht, wenn Sie darauf zugreifen, so dass eine Null-Referenz Ausnahme ausgelöst wird nicht? Auf diese Weise, auch wenn ein Elternteil gelöscht wurde, kann ihr Kind noch lesen es die Beziehung, aber wenn Aktualisierung ein Kind, oder Erstellen ein neues Kind , die gelöscht Eltern ist nicht zugänglich.

Beispiel:

Buch hat eine authorid, und wenn der Autor authorid gehört, ist Soft gelöscht, dann:

$book->getAuthor();

wäre die richtige Autor zurückkehren (nur zur Ansicht). Wenn jedoch ein neues Buch wurde hinzugefügt, der Autor, die Soft-gelöscht ist nicht verfügbar ausgewählt werden.

Weiß jemand, ob diese Funktionalität in Propel gebaut wird?

War es hilfreich?

Lösung

Soft löschen ist eine gebrochene Abstraktion. Sie sollten das archivierbar Verhalten verwenden, anstatt (warum in den Propel Blog: http://propelorm.org/blog/2011/08/29/introducing-archivable-behavior-and-why-soft-delete-is-deprecated.html )

Andere Tipps

Ich bin mir nicht sicher, warum ein Autor erlaubt würde gelöscht werden, aber seine Werke würde nicht (oder, im Grunde, warum dies kommt als Szenario in Ihrem Projekt nach oben), aber Sie können benutzerdefinierte Kriterien erstellen und ausführen. Der folgende Code ist abhängig von der Version von Propel Sie verwenden (aber das Konzept bleibt gleich):

$c = new Criteria();
$c->getNewCriterion(self::AUTHOR_ID, $parentId);
return self::doSelect($c, $connection);

stolperte über diese Frage. Scheint, wie es viel mehr Sinn machen würde, nicht weich für die Funktionalität löschen verwenden Sie beschreiben. Ich würde Ihnen raten dringend, dass Sie ein Feld-Flag erstellen, ob Autoren aktiviert sind, das heißt ein boolean Feld namens isEnabled.

Sie können dann mit den erzeugten Filtermethode für AuthorQuery Klasse, in diesem Fall

AuthorQuery::create->filterByisEnabled()
                   ->find();

Wenn ein Objekt immer noch wird in der Anwendung verwendet wird, ist es nicht wirklich angemessen zu löschen. Soft-Löschfunktion ist nur dann wirklich als Referenz oder revert Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top