Ich bin neu in Symfony and Doctrine.Symfony2/Doctrine2 - ManyToOne - Inverse Seite speichern
Ich habe eine Entität "Benutzer" und eine Entität "Typ". Ein Benutzer kann einen Favoritentyp haben und ein Typ kann viele Benutzer haben, die diesen bestimmten Typ als Favorit haben. Also brauche ich eine Viele (User) to One (Type) Beziehung.
Ich habe es implementiert und es funktioniert gut (meistens). Aber eine Sache verstehe ich nicht.
Wenn ich etwas tun so funktioniert es:
$user = new User();
$type = new Type();
$user->setFavoriteType($type);
$em->persist($user);
$em->persist($type);
$em->flush();
Die Objekte werden erzeugt und an die DB gespeichert. Und die favorite_type_id ist korrekt eingestellt. So Ändern der Eigentümerseite funktioniert wie erwartet.
Aber wenn ich den Benutzer der inversen Seite hinzufügen (nur) und den Entity Manager leeren die favorite_type_id ist nicht festgelegt.
$user = new User();
$type = new Type();
$type->getUsers()->add($user); //same with $type->addUser($user);
$em->persist($user);
$em->persist($type);
$em->flush();
Warum ist das? Gibt es einen Grund, warum es nicht von der umgekehrten Seite funktioniert? Muss ich das wirklich manuell einstellen? Wenn ich die addUser-Methode in der Typ-Entity wie "$ user-> setFavoriteType ($ this)" manipuliere, funktioniert es. Aber sollte das nicht die Aufgabe der Lehre sein?
Die Dokumentation sagt
Wenn eine bidirektionale Assoziation aktualisiert wird, nur Lehre prüft auf einer der beiden Seiten für diese Veränderungen. Dies wird die Eigentümerseite des Vereins genannt.
So scheint es das gewünschte Verhalten zu sein, ist das richtig? Aber warum? Aufgrund der Leistung? Semantische Gründe?
Ich wäre froh, wenn mir jemand das erklären könnte oder mir sagen könnte, was ich falsch mache.
Interessante Frage, ich bin auch neugierig auf die Wahl hinter dieser Logik. – DonCallisto
http://doctrine-orm.readthedocs.org/en/latest/reference/unitofwork-associations.html – DonCallisto
Können Sie uns die zugehörigen Entitäten zeigen? – ReynierPM