Doctrine 2 pas de la persistance de la relation de la possession d'un côté à de Nombreux
J'ai ce code
//ONE to many Bidir -- inverse side
/**
* @ORM\OneToMany(targetEntity="Item", mappedBy="Room", cascade={"persist"})
**/
protected $items;
L'autre côté
//ONE to many Bidir-- own side
/**
* @ORM\ManyToOne(targetEntity="Room", inversedBy="items")
* @ORM\JoinColumn(name="room_id", referencedColumnName="id")
**/
protected $room;
Mon Problème est que je vais à la page de l'article et je sélectionne Chambre , alors je peux voir les articles preselecetd dans la Chambre de la page
Mais si je vais à la Salle de la page et j'essaie de multiselect de nombreux articles , alors ceux qui ne sont pas conservées
EDIT: j'ai vu que c'est seulement pour OneToMany rapport navire. Pour Manyto Nombreux, ils fonctionnent très bien
EDIT2:
Je parle du backend domaine où j'ai de la forme et de sélectionner la zone où je peux sélectionner plusieurs éléments. Ce formulaire/CRUD code /contrôleurs sont généré par la doctrine. DONC je n'ai pas besoin d'ajouter de fonction supplémentaire. De toute façon c'est mon contrôleur de code
$editForm = $this->createForm(new RoomType(), $entity);
$request = $this->getRequest();
$editForm->bindRequest($request);
if ($editForm->isValid()) {
$em->persist($entity);
$em->flush();
Quand j'essaie de marcher à travers contrôleur comme ce
foreach($entity->getItems() as $item)
echo $item;
Ensuite, je peux voir tous les thye éléments. Donc, cela signifie que tous les éléments sont là, dans l'objet principal, mais n'est pas persistant. je ne sais pas pourquoi.
Si il est dû , le revers de problème. Comment puis-je chnage de la relation de cause à l'inverse et à l'inverse à la possession d'
OriginalL'auteur user825904 | 2012-08-17
Vous devez vous connecter pour publier un commentaire.
Votre code n'est pas correct, en fonction de vos commentaires dans les annotations.
C'est le posséder côté, parce que vous spécifiez le
inversedBy
attribut:C'est le inverse côté (parce qu'il a la
mappedBy
attribut):De sorte que votre code dit:
Item
est le propriétaire de côté,Room
est l'inverse de ce côté.Pour le rendre plus propre:
Tandis que, pour le côté inverse:
Et, encore une fois:
Plus, une autre considération importante:
Ainsi, pour la persistance des éléments à partir de l'inverse de côté (salle de), vous devez vérifier quel élément a été sélectionné/désactivée et si la pièce contient déjà que le point ou pas.
OriginalL'auteur gremo
Vous suffit d'utiliser la boucle pour l'ensemble de la salle. L'élément est en raison de côté et vous de l'édition inverse de côté (de la salle).
Symfony2 jamais les mises à jour en raison côtés lors de l'édition inverse.
La solution la plus simple pour vous est d'utiliser la boucle avant de la persistance de la chambre:
et cascade sur le côté inverse:
Pour mes projets, j'ai fait réutilisable solution basée sur des événements de collecte des auditeurs.
Si vous avez le temps & compétences je vous encourage à faire de même
Si vous avez cascade sur le côté inverse, vous n'avez pas à les conserver. Si vous l'avez obtenu avant sans doute de toutes les données de l'objet a été sauvé, mais sans parent - pièce.
Lisez à propos des événements de formulaire: stackoverflow.com/questions/9651095/..., la collection est juste l'incorporation d'éléments
OriginalL'auteur Maciej Pyszyński