2013-01-08 10 views
6

Próbuję sklonować obiekt-obiekt do innej tabeli w Symfony 2/Doctrine. Masz pomysł, jak to zrobić?Symfony 2 - Klonowanie do innej tabeli

Po pobraniu obiektu z bazy danych można sklonować go tak:

$newobject = clone $oldbject; 

To daje mi nowy obiekt, który można utrzymywać jako nowy rekord do tej samej tabeli w bazie danych. Właściwie to nie chcę tego robić. Chcę zapisać obiekt w innej tabeli w bazie danych. Ale aby to zrobić, musiałbym zmienić podmiot macierzysty, prawda? Jak to osiągnąć?

Odpowiedz

8

Ale tak naprawdę nie jesteś naprawdę klonowanie podmiot. W rzeczywistości chcesz innego podmiotu. Jak wyglądają te dwa podmioty? Czy mają te same pola? Można zrobić coś takiego:

$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)); 
    } 
} 

To niesprawdzone - i może mieć błąd lub dwa, ale powinno to pozwolić wszystkie właściwości mogą być kopiowane z jednego obiektu do drugiego (zakładając właściwości mają taką samą nazwę zarówno obiekty).

+1

działa świetnie! Musiałem również udostępnić stare właściwości, ale to samo, co w nowym. – mvmoay