2016-06-30 9 views
0

私はSymfony 2.8を使用しています。Symfony、データをem1からem2に移動

私はもはや必要のないたくさんのデータを持つ巨大なテーブルを持っています。 symfonyコマンドで別のデータベースにデータを移動したい。

私は2つのエンティティマネージャを持っている:

em_archive = mydb_archive

em_default = mydbという

私はコードを持っている:私はエラー「のお知らせを持っているコードで

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

を:未定義インデックス:000000004618b9830000000172fdd8f3 "

私のエンティティリンク(onetomany、manytoone)に問題はありますか?

+1

idsを設定する直前に$ emDefault - > detach($ dataTest)を追加できますか? – goto

+1

エンティティマネージャは大量のインポート/エクスポートを行うようには設計されていませんので、そのためにDBAL接続を使用する必要があります – goto

答えて

2

エンティティは、エンティティマネージャにクラスタイプでマップされるため、同じクラスを2つのエンティティマネージャにマッピングすることはできません。これは、プロキシクラスからわかるように、UnitOfWorkおよび/または所有者EntityManagerへの参照を含んでいます。

また、load-hydrate-persist-dehydrate-flushのパフォーマンスが非常に悪く、メモリリークの問題が頻繁に発生します。

したがって、ORMレイヤは使用できませんが、Doctrine DBALは引き続き使用できます。

「マッピング」構文の例については、DBAL insertを参照するか、古い形式のクエリを使用してください。

関連する問題