È possibile confrontare lo stato di un oggetto entità tra la versione "sporca" corrente (un oggetto che ha alcune delle sue proprietà modificate, non ancora persistente) e la versione "originale" (i dati sono ancora nel database).Entità Doctrine2 - È possibile confrontare un oggetto "sporco" con uno dal database
La mia ipotesi era che potevo avere un oggetto "sporco", quindi estrarne uno nuovo dal DB e confrontare i due. Per esempio:
$entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);
$editForm = $this->createContentForm($entity);
$editForm->bind($request);
if ($editForm->isValid()) {
$db_entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);
// compare $entity to $db_entity
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('content_edit', array('id' => $id)));
}
Ma nella mia esperienza, $ entità e $ db_entity sono sempre lo stesso oggetto (e hanno gli stessi dati come $ entità, dopo che il modulo di richiesta di associazione $). C'è un modo per ottenere una nuova versione dell'entità $ accanto alla versione "sporca" a fini di paragone? Le soluzioni che ho visto tutte estraggono i dati necessari prima che si verifichi il bind del modulo, ma preferirei non avere questa limitazione.
Aggiornamento: Per chiarire, non cerco solo le modifiche alle proprietà delle entità ma anche le relative raccolte di entità.
chiedo in modo specifico per Ican fare una soluzione migliore per la rimozione di elementi da un modulo di raccolta Symfony2.[La soluzione corrente] (http://symfony.com/doc/2.0/cookbook/form/collections.html#templates-modifications) dove si estraggono i valori prima che il binding appaia troppo limitante e non favorisca una buona funzionalità per occupatene. –
Questo è un duplicato di http://stackoverflow.com/questions/9057558/new-built-in-way-to-get-all-the-changed-fields-in-doctrine-2/9057705#9057705 – Ocramius
dovrei espandi la portata della mia domanda, dal momento che non sto solo cercando le modifiche all'entità stessa, ma anche le modifiche alle raccolte correlate all'interno dell'entità. Usare UnitOfWork aiuta solo con il primo. Tuttavia, sembra che il suggerimento di Alex di usare $ em-> clear() prima di fare un altro find() otterrà l'entità "fresca" che sto cercando. –