2013-01-08 3 views
6

Sto provando a clonare un oggetto entità su un'altra tabella in Symfony 2/Doctrine. Qualche idea su come fare questo?Symfony 2: clona l'entità su un'altra tabella

Dopo aver recuperato l'oggetto dal database posso clonare in questo modo:

$newobject = clone $oldbject; 

Questo mi dà un nuovo oggetto, che posso persistere come un nuovo record per la stessa tabella nel database. In realtà non voglio farlo. Voglio memorizzare l'oggetto così com'è in una tabella diversa nel database. Ma per fare questo, dovrei cambiare l'entità genitore, giusto? Come ottenere questo?

risposta

8

Ma poi non sei proprio clonazione un'entità. In effetti, vuoi una diversa entità. Come sono le due entità? Hanno gli stessi campi? Si potrebbe fare qualcosa di simile:

$oldEntity = $oldEntity; 
$newEntity = new NewEntity(); 
$oldReflection = new \ReflectionObject($oldEntity); 
$newReflection = new \ReflectionObject($newEntity); 

foreach ($oldReflection->getProperties() as $property) { 
    if ($newReflection->hasProperty($property->getName())) { 
     $newProperty = $newReflection->getProperty($property->getName()); 
     $newProperty->setAccessible(true); 
     $newProperty->setValue($newEntity, $property->getValue($oldEntity)); 
    } 
} 

Questo non è testato - e può avere un errore o due, ma questo dovrebbe permettere a tutti gli oggetti da essere copiate da un oggetto all'altro (supponendo che le proprietà hanno lo stesso nome su entrambi oggetti).

+1

funziona alla grande! Avevo bisogno di rendere accessibili anche le vecchie proprietà, ma questo è lo stesso di quello nuovo. – mvmoay