2016-06-30 4 views
0

Ich benutze Symfony 2.8.Symfony, Daten von em1 nach em2 verschieben

Ich habe eine riesige Tabelle mit viel Datsa, die ich nicht mehr brauche. Ich möchte Daten in einer anderen Datenbank mit einem Symfony-Befehl verschieben.

Ich habe 2 Einheiten Manager:

em_archive = mydb_archive

em_default = meinedb

Ich habe den Code:

$emDefault = $this->getContainer()->get('doctrine')->getManager('em_default'); 
    $emArchive = $this->getContainer()->get('doctrine')->getManager('em_archive'); 
    $repoArchive = $emDefault->getRepository('MyBundle\Datas', 'em_archive'); 
    $repoDefault = $emDefault->getRepository('MyBundle\Datas', 'em_default'); 

    $dataTest = $repoDefault->getOneDataTest(); 
    $dataTest->setOldId($dataTest->getId()); 
    $dataTest->setId(null); 
    $emArchive->persist($dataTest); 
    $emArchive->flush(); 

Mit dem Code, den ich den Fehler „Hinweis haben: Nicht definierter Index: 000000004618b9830000000172fdd8f3 "

Gibt es ein Problem mit einer meiner Entity-Links (onetomany, manytoone)?

+1

können Sie versuchen, $ emDefault -> detach ($ datentest) kurz vor dem Setzen der IDs? – goto

+1

Und bitte beachten Sie, dass der Entity Manager nicht für einen massiven Import/Export ausgelegt ist. Sie sollten dafür die DBAL-Verbindung verwenden – goto

Antwort

2

Entitäten werden durch den Klassentyp einem Entity Manager zugeordnet, so dass nicht dieselbe Klasse in zwei Entity Manager zugeordnet werden kann. Dies ist von Entwurf, wie Sie von Proxy-Klassen sehen können, die Verweise auf die UnitOfWork und/oder die Besitz EntityManager enthält.

Auch die Leistung von Load-Hydrat-Persist-Dehydrat-Flush ist sehr schlecht, Sie erhalten viele Speicher-Leck-Probleme, und so weiter.

Sie können also nicht die ORM-Ebene verwenden, aber Doctrine DBAL können Sie weiterhin verwenden.

Siehe DBAL insert für ein Beispiel für "Mapping" -Syntax, oder verwenden Sie gute altmodische Abfragen.