2016-06-30 43 views
0

我使用Symfony 2.8。Symfony,將數據從em1移動到em2

我有一個很大的datsa表,我不需要了。我想用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

你能嘗試在設置ID之前添加$ emDefault - > detach($ dataTest)嗎? – goto

+1

請注意,實體管理器並非設計用於大量導入/導出,您應該使用DBAL連接 – goto

回答

2

實體通過類類型映射到實體管理器,因此不能將相同的類映射到兩個實體管理器中。這是設計的,正如您可以從代理類中看到的,其中包含對UnitOfWork和/或擁有的EntityManager的引用。

此外,load-hydrate-persist-dehydrate-flush的性能非常差,會導致很多內存泄漏問題,等等。

所以,你不能使用ORM層,但你仍然可以使用Doctrine DBAL。

查看DBAL insert查看「映射」語法的示例,或使用良好的老式查詢。