2012-04-27 25 views
1

XMLフィードからエンティティを逆シリアル化しています。エンティティにはすでにID(XMLからの読み取り)があります。DoctrineとSymfony2は新しいエンティティEntityManagerをマージできません#merge()

私は、永続化とフラッシング(データベースに保存)する前に、エンティティをマージしようとしています。エンティティをマージする必要があります。エンティティがデータベースに既に存在する可能性があります。その場合、検証に失敗するのではなく更新する必要があります。

は、ここに私のコードです:

<?php 

// build the MgLeague from xml 
$league = $this->serializer->deserialize(
    $xml, 
    'Acme\Website\Entity\MgLeague', 
    'xml' 
); 

if ($league) 
{ 
    // merge the league 
    $league = $this->em->merge($league); 

    // validate 
    if (0 === count($this->validator->validate($league))) 
    { 
     $this->em->persist($league); 
     $this->em->flush(); 
    } 
} 

そして、ここで私が受けてるのエラーです:

PHP Fatal error: Call to undefined method Doctrine\ORM\UnitOfWork::newInstance() in /Website/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php on line 1457 
PHP Stack trace: 
PHP 1. {main}() /Website/app/console:0 
PHP 2. Symfony\Component\Console\Application->run() /Website/app/console:22 
PHP 3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /Website/vendor/symfony/src/Symfony/Component/Console/Application.php:118 
PHP 4. Symfony\Component\Console\Application->doRun() /Website/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:75 
PHP 5. Symfony\Component\Console\Command\Command->run() /Website/vendor/symfony/src/Symfony/Component/Console/Application.php:194 
PHP 6. Mahango\WebServiceBundle\Command\InsertLeaguesCommand->execute() /Website/vendor/symfony/src/Symfony/Component/Console/Command/Command.php:224 
PHP 7. Doctrine\ORM\EntityManager->merge() /Website/src/Mahango/WebServiceBundle/Command/InsertLeaguesCommand.php:131 
PHP 8. Doctrine\ORM\UnitOfWork->merge() /Website/vendor/doctrine/lib/Doctrine/ORM/EntityManager.php:531 
PHP 9. Doctrine\ORM\UnitOfWork->doMerge() /Website/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:1378 

Fatal error: Call to undefined method Doctrine\ORM\UnitOfWork::newInstance() in /Website/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php on line 1457 

Call Stack: 
    0.0003  632280 1. {main}() /Website/app/console:0 
    0.0133 2936544 2. Symfony\Component\Console\Application->run() /Website/app/console:22 
    0.0151 3192136 3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /Website/vendor/symfony/src/Symfony/Component/Console/Application.php:118 
    0.0538 7941912 4. Symfony\Component\Console\Application->doRun() /Website/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:75 
    0.0552 7941912 5. Symfony\Component\Console\Command\Command->run() /Website/vendor/symfony/src/Symfony/Component/Console/Application.php:194 
    0.0816 13131288 6. Mahango\WebServiceBundle\Command\InsertLeaguesCommand->execute() /Website/vendor/symfony/src/Symfony/Component/Console/Command/Command.php:224 
    0.4149 13519208 7. Doctrine\ORM\EntityManager->merge() /Website/src/Mahango/WebServiceBundle/Command/InsertLeaguesCommand.php:131 
    0.4149 13519208 8. Doctrine\ORM\UnitOfWork->merge() /Website/vendor/doctrine/lib/Doctrine/ORM/EntityManager.php:531 
    0.4149 13519424 9. Doctrine\ORM\UnitOfWork->doMerge() /Website/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:1378 

それはDoctrineのバグのように私には見えます。

私はDoctrine(バージョン2.1.6)でSymfony2(バージョン2.0.12)を使用しています。

答えて

関連する問題