Wie verwenden Sie die cascade-option in Doctrine2 zu haben, verbundenen Entitäten automatisch erhalten?
Kann jemand erklären mir das:
$user = new User();
/* why do I have to call Entity Comment while trying to insert into db? */
$myFirstComment = new Comment();
$user->addComment($myFirstComment);
$em->persist($user);
$em->persist($myFirstComment);
$em->flush();
Warum muss ich bei Anruf Entität Kommentar, während Sie versuchen, in die db einfügen?
Habe ich cascade für, die.
- Bedeutet das, dass wenn ich 50 Verhältnis in der Entität "Benutzer" mit anderen
Personen, die ich anrufen jeden Bezug manuell, wenn Sie versuchen zu
update/insert/delete? - Warum-Kaskade vorhanden ist, wenn ich alle manuell?
Wenn ich alle rufen, dass die relation manuell ist es irgendwie blöd zu bedienen Lehre überhaupt.
Ich nicht. Jede Hilfe ist willkommen.
Dies ist mit diesem verbunden: Lehre 2, nicht einfügen um die Datenbank, wenn der Bezug vorhanden ist
- Ich andere Worte, Warum muss ich aufrufen, Verweis auf andere Unternehmen, wenn ich Kaskade?
- Lange Geschichte kurz: Wenn ich die Assoziation von einer Person zu einer anderen muss ich anrufen immer, die andere Person auf inserts/updates. Ich kann nicht sagen, "$user " ->addComment("some comment"), habe ich zu nennen relation und dann zu tun, "$user " ->addComment("some comment"). Das ist sinnvoll, aber es ist irgendwie dumm. Was ist, wenn ich 50 Beziehungen? Zu nennen, jeder Bezug auf " einfügen/aktualisieren? Lehre ist ideal für wählen, aber es nervt, für alles andere haben Sie Beziehungen. Ich habe 50 mal $this->em>getReference('entity-name') .....
- ich habe Ihre Frage beantwortet mit viel Erklärung und der Hinweis auf die Dokumentation + schonmal ein code-Beispiel. bitte akzeptieren Sie die Antwort, wenn es dir geholfen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Lehre automatisch Griff die Persistenz Ihrer
User#comments
Eigenschaft, die Sie haben zu setzen kaskadieren auf die "anhalten" - Funktion.Der Kaskade ( anhalten, entfernen , Zusammenführen, alle ) - option gibt Ihnen die Möglichkeit, ommit ...
... wenn man es korrekt auf Ihrem inverse-Seite einer bidirektionalen Beziehung zum Beispiel.
Es kann auch automatisch entfernen
User#comments
wenn Sie einen Benutzer entfernen Entität mit cascade "entfernen" !Beispiel:
Lesen Sie mehr über die Assoziations-mapping und Kaskade in der Transistive Persistenz /Cascade-Optionen Kapitel der Dokumentation.
Bitte denkt daran:
Lehre wird nur die Besitz-Seite des Vereins für Veränderungen.
Änderungen nur gemacht, um die inverse Seite des Vereins werden ignoriert. Stellen Sie sicher, aktualisieren Sie beide Seiten einer bidirektionalen Assoziation (oder zumindest der besitzenden Seite, von der Lehre s point of view)
mappedBy
attribute der OneToOne, OneToMany oder ManyToMany mapping-Deklaration. DiemappedBy
Attribut enthält den Namen des Vereins-Feld auf der besitzenden SeiteinversedBy
attribute der OneToOne, ManyToOne, oder ManyToMany mapping-Deklaration. DieinversedBy
Attribut enthält den Namen des Vereins-Feld auf der inverse-Seite.Außerdem:
müssen Sie nur rufen Sie bestehen, wenn Sie erstellen Sie ein neues root-Element ( d.h.
$user = new User()
), die nicht schon durch die Lehre ( und Sie müssen nicht zu nennen, bestehen auf$myFirstComment
in deinem Beispiel, wenn Sie die cascade-option korrekt ).Ansonsten müssen Sie nur rufen Sie bündig wird, wenn das Element nicht aus irgendeinem Grund getrennt wurde.