我正在反序列化来自 XML 提要的实体。实体已经有一个 ID(从 XML 读取)。
我正在尝试在持久化和刷新实体之前合并实体(将其保存到数据库中)。我需要合并实体,因为它可能已经存在于数据库中,如果是这样,我需要它更新而不是验证失败。
这是我的代码:
<?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
在我看来,它就像一个教义错误。
我正在使用 Symfony2(2.0.12 版)和 Doctrine(2.1.6 版)。