Entities passed to the choice field must be managed

ottobre 4, 2011
By

Symfony delle volte riesce ad essere snervante
Ho appena perso un bel po’ di tempo per risolvere questa eccezione
Sostanzialmente ho creato una classe Tag che ha una proprietà $parentTag che è sempre un’istanza di Tag, punta alla colonna id della stessa tabella e così via
Tutto mappato su Doctrine tramite annotazioni

Ho sistemato il form e tutto viene renderizzato bene, le nuove entità vengono create.
Il problema era nell’edit e update. Continuava a saltare fuori l’errore di cui sopra, ma solo per quelle che avevano la proprietà popolata

Ho aggiunto questo snippet prima che il form venga passato al vaglio nei metodi update e edit del controller

....
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Tag entity.');
        }
        if($entity->getParentTag()!=null){
        $m = $em->merge($entity->getParentTag());
        $entity->setParentTag($m);
        $entity = $em->merge($entity);
        }
....

e questo ha risolto il problema
One more down, on with the war ….

Grazie a Marco Pivetta per avermi messo sulla giusta strada con una sua risposta nel gruppo di symfony

Tags: , ,

One Response to Entities passed to the choice field must be managed

  1. Ho avuto gli stessi problemi con form multi-step (maledetti!)… Purtroppo non è il caso in cui si userebbe un ORM 🙁
    E’ un bel disastro serializzare/deserializzare tutti quei dati…
    Non ho ancora trovato una soluzione “comoda” al problema, ma prima o poi ci arriverò 🙂
    Attualmente il modo migliore resta il salvare semplicemente gli identifier e ri-costruire l’intero albero di entità ad ogni chiamata, ma è decisamente scomodo, anche se molto sicuro…
    Considera comunque che io, oltre a $em->merge($entity); utilizzo anche un $em->refresh($entity) per essere sicuro al 100% di non avere dati de-serializzati che possano sovrascrivere roba importante nelle entità…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


*