Die Symfony / Doctrine-Entität führt zu einer verschmutzten Entitätszuordnung, wenn sie mehrfach mit dem Entitätsmanager zusammengeführt wird

8

Ich verwende Symfony2 und Doctrine

Ich habe eine Doktrinsentität, die zu einer Sitzung serialisiert / unserialisiert und in mehreren Bildschirmen verwendet wird. Diese Entität hat eine Anzahl von Eins-zu-viele-Assoziationen.

Die Doktrin-Entität hat beispielsweise eins zu viele:

%Vor%

Die Artikelentität wird wie folgt gespeichert und abgerufen:

%Vor%

Ich kann die Entity beliebig oft speichern und laden und sie dann wieder in den Entity Manager einfügen und speichern. Dies ist nur, wenn es eine neue Entität ist.

Sobald ich jedoch eine Entity aus der Datenbank geladen habe und sie dann in der Sitzung gespeichert habe, bekomme ich Probleme.

Ich weiß aus anderen Beiträgen, dass Sie nach dem Deserialisieren einer gespeicherten Entität $ em- & gt; merge ($ entity);

ausführen müssen

Ich bin in der Lage, die Entität zusammenzuführen, eine neue Unterentität (eins zu viele) hinzuzufügen und dann zu speichern:

%Vor%

Nach der ersten Zusammenführung und dem Hinzufügen von Bildern kann ich jedoch keine weiteren Untereinheiten hinzufügen. Wenn ich versuche, ein zweites Bild hinzuzufügen, gibt es den folgenden Fehler zurück:

%Vor%

Zusammenfassend kann ich eine beliebige Anzahl von Änderungen an einer Entität vornehmen und sie in der Sitzung speichern. Wenn ich jedoch $ em- & gt; merge mehrmals ausführen und Sub-Entitäten hinzufügen, werden die neuen Sub-Entitäten als markiert schmutzig.

Weiß jemand, warum eine Entität als schmutzig markiert wird? Muss ich die Entität selbst zurücksetzen, und wenn ja, wie könnte ich das tun?

    
harraksimon 05.12.2012, 00:11
quelle

1 Antwort

9

Verstanden.

Für jeden, der in Zukunft auf dieses Problem stoßen könnte:

Sie können keine Entität zusammenführen, für die keine Untereinheiten vorhanden sind. Sie werden als schmutzig markiert.

I.E

Sie haben möglicherweise einen Artikel mit zwei Bildern, die bereits in DB gespeichert sind.

%Vor%

Wenn Sie speichern, serialisieren Sie den Artikel in der Sitzung, und nehmen Sie dann die Serialisierung und Zusammenführung des Artikels vor. Es ist in Ordnung.

Wenn Sie ein neues Bild hinzufügen und es zur Sitzung serialisieren, haben Sie Probleme. Dies liegt daran, dass Sie eine nicht hochgeladene Entität nicht zusammenführen können.

%Vor%

Was ich tun musste war:

Nachdem ich den Artikel entserialisiert habe, entferne ich die nicht gedeckten Bilder und speichere sie in einem temporären Array (ich suche nach ID). DANN füge ich den Artikel zusammen und füge die nicht unterstützten Bilder wieder hinzu.

%Vor%

Ich kann dann bei Bedarf weitere Bilder hinzufügen und den Vorgang wiederholen, bis ich den Artikel endgültig in der Datenbank gespeichert habe.

Dies ist praktisch, wenn Sie mehrere Seiten erstellen oder Bilder über AJAX hinzufügen müssen.

    
harraksimon 05.12.2012 23:18
quelle