J'ai cette entité: et cet écouteur: p> et cela fonctionne bien si la collection d'Apple est vide, mais si Il a un élément que j'obtiens une erreur de duplication. P> Comment puis-je dire à l'unité de travail que je veux seulement recalculer la collection de porc? p> Mise à jour forte> < / P> Il y a un nouvel événement de préflush ( https://github.com/doctrine/ Doctrine2 / Pull / 169 ) Et je pense que ce genre de choses peut être fait là-bas. Ce pr n'est pas dans la branche que j'utilise mais j'essayons! P> P>
3 Réponses :
Lors de la mise à jour d'une entité lors de l'événement ONFLUSH EM> d'un écoute, tout ce que vous devez appeler est ComputerChangeSet () CODE>:
$myNewUserEntity = new Entity\User;
$myNewTagEntity = new Entity\Tag;
$entity->user = $myNewUserEntity;
// make sure you call add() on the owning side for *ToMany associations
$entity->tags->add($myNewTagEntity);
$em->persist($myNewUserEntity);
$em->persist($myNewTagEntity);
$metaUser = $em->getClassMetadata(get_class($myNewUserEntity));
$uow->computeChangeSet($metaUser, $myNewUserEntity);
$metaTag = $em->getClassMetadata(get_class($myNewTagEntity));
$uow->computeChangeSet($metaTag, $myNewTagEntity);
$meta = $em->getClassMetadata(get_class($entity));
$uow->computeChangeSet($meta, $entity);
Désolé mais le préflush a résolu mon problème. Modification de l'UOW est une sorte de piratage et très désordonné, il peut vous rendre fou de collections.
Coma, je suis d'accord. Vous êtes question était de faire des choses sur Onflush () et je suis le seul moyen de le faire. Si votre cas d'utilisation peut être mis en œuvre en préflush () à la place, c'est génial!
Eh bien ... il semble que l'événement de préflush si attendu fait presque n'importe quoi ... toutes les listes planifiées sont vides.
Désolé d'entendre ça, mais heureuse ma solution a aidé à la fin. BTW, je pense que vous vouliez dire "fait presque rien i>";)
Tu es mon héros @dotjon!
Ceci peut être fait avec le nouvel événement de préflush (Symfony 2.1).
Ajouter un auditeur à l'événement (est une mauvaise pratique pour injecter tout le conteneur de service, mais est parfois la voie à suivre ): p> Et l'auditeur devrait être quelque chose comme: p>
Lorsque vous souhaitez mettre à jour l'entité actuelle, vous envoyez à (pour cet exemple, je vais utiliser disons quand je modifie la propriété de l'objet parent "Stressé" sur donc là que vous voyez: p> Pour obtenir de l'aide pour la création de la méthode OnFlush, veuillez vous reporter à Onflush CODE> et crée également une association à cette entité
parent code> objet code> et
enfant code> objet) p>
1 code> Je veux également associer une nouvelle
enfant code> objet à l'objet parent dans mon
Onflush code> méthode, il ressemblera à quelque chose comme ceci: p>
$ UOW-> persister () code> pas strong>
$ em-> persist () code> li >
ComputerChanGeSet code> sur l'objet enfant. LI>
RecomputeSingleTentityChangeset code> sur l'objet parent Li>
ol>