Customer
è il lato inverso del rapporto "parole chiave/clienti" con Keyword
:Aggiornamento (dal lato opposto) delle relazioni bidirezionali bidirezionali in Doctrine 2?
/**
* @ORM\ManyToMany(targetEntity="Keyword", mappedBy="customers",
* cascade={"persist", "remove"}
*)
*/
protected $keywords;
Quando si crea un nuovo cliente, si dovrebbe selezionare una o più parole chiave. Il campo modulo entità è:
$form->add($this->factory->createNamed('entity', 'keywords', null, array(
'class' => 'Acme\HelloBundle\Entity\Keyword',
'property' => 'select_label',
'multiple' => true,
'expanded' => true,
)));
Nel mio codice di controllo, dopo vincolante la richiesta e verificare se la forma è valida, ho bisogno di persistere sia il cliente e tutte le associazioni cliente/parola chiave (s), che è il join tavolo.
Tuttavia cliente è il lato inverso, quindi questo non funziona:
if($request->isPost()) {
$form->bindRequest($request);
if(!$form->isValid()) {
return array('form' => $form->createView());
}
// Valid form here
$em = $this->getEntityManager();
$em->persist($customer);
$em->flush();
}
evento con l'opzione "a cascata", questo codice non riesce. $customer->getKeywords()
restituirà Doctrine\ORM\PersistentCollection
, che contiene solo parole chiave selezionate.
Devo controllare manualmente quale parola chiave è stata rimossa/aggiunta e quindi aggiornata dal lato proprietario?
Ho pubblicato la mia soluzione [qui] [1]. Spero che ti sarà d'aiuto. [1]: http://stackoverflow.com/a/27113108/3133441 – ajtamwojtek