2011-11-01 6 views
0

J'utilise la doctrine 2.1 J'ai deux objets pour le même enregistrement, un persistant et un non persistant. Au lieu de réécrire toutes les propriétés, je voudrais assigner un ID au nouveau et appeler persist() dans l'espoir que la ligne appropriée sera mise à jour. Dans le code pseudo un boostrap ressemble à ceci:Doctrine: comment mettre à jour un objet

$old_a = new A(name: "a", value: "old") 
$em->persist($old_a); 
$em->flush() 

maintenant j'ai dans la base d'une ligne avec le nom « a » et la valeur « ancienne ». Je voudrais avoir de la valeur "nouveau". Je pouvais faire

$a = new A(name: "a", value: "new") // create new object 
$query = $em->createQuery("SELECT A a WHERE name = 'a'") // check if object with the same name already exists 
$old_a = $query->getSingleResult(); 
$old_a->setValue($a->getValue()) // update value with the new one - here is the problem! If there are many properties I do not want to invoke many times setXXX($a->getXXX). I would like to do something like $old_a = $a or $a->setId($old_a->getId()) 
$em->persist(old_a) // update the row 
+0

Qu'est-ce que vous essayez de faire exactement? Vos deux entités dans l'échantillon ne sont pas dans la base de données avant la persistance. Obtenez-vous votre $ old_a entité de la base de données et souhaitez mettre à jour certains de ses champs d'une entité différente qui n'est pas géré par Doctrine? – gilden

+0

@gilden s'il vous plaît traiter le premier échantillon de code comme "bootstrap" - Je vais mettre à jour ma question pour le rendre plus clair – mkk

+0

Vous voulez faire une copie si l'objet a et changer une valeur et la persister comme une nouvelle? –

Répondre

0

La solution consiste à créer méthode setId et juste réécrire id

Questions connexes