Symfony:在phpunit的测试套件中无法删除分离的实体

时间:2016-06-28 10:34:14

标签: php symfony doctrine-orm phpunit

我实际上正在对我的api进行一些功能测试,而我正面临一个我不太了解的问题。

我想测试一个与远程Web托管服务器交互的API。目标是管理VirtualHosts,DNS区域,数据库等...... 我有一个测试远程服务器并且为了避免冲突,我在测试后删除了创建的东西(在TearDown()函数中)并创建了基础(在setUp()函数中)。在setUp()我也在设置中加载灯具。

在添加我的主要实体的子项的测试之后,我想清理远程服务器:

$service = $this->fixtures->getReference('service-web');
$this->container->get('webmanager')->deleteHosting($service, true);

deleteHosting()函数删除所有远程资料(真参数是" force"参数,确保函数在发生错误后不会停止。

$service变量包含我的主要服务实体。我也在这个实体中与addonDomain的实体建立了一对多的关系。 我的functionnal测试创建了一个addonDomain。 测试没问题,但是当我尝试删除我的服务时,附加的实体让Doctrine大喊大叫:Doctrine\ORM\ORMInvalidArgumentException: Detached entity AppBundle\Entity\Service\Web\AddonDomain@0000000054814da900000000073c524a cannot be removed

我尝试了很多东西,但没有一个能够工作(即:使用教条管理器来检索实体而不是使用夹具。

非常感谢你的帮助, 最好的问候。

解决了! 实际上,我使用的是测试类的容器和实体管理器,而不是客户端本身。那就是问题......

1 个答案:

答案 0 :(得分:1)

尽管这是一个古老的问题,但是最近在使用Symfony 4.4时遇到了同样的问题,Detached entity error in Doctrine帮助我解决了这个问题。基本上,就像@Can Vural建议的那样,在删除之前调用 merge 可以解决问题,但是缺少的一点是您必须重新分配实体,这样:

$entity = $doctrineManager->merge($detachedEntity);  
$doctrineManager->remove($entity);
$doctrineManager->flush();

这解决了我的问题。

请记住,merge已过时,并将在《学说3》中删除:https://github.com/doctrine/orm/blob/master/UPGRADE.md#bc-break-removed-entitymanagermerge-and-entitymanagerdetach-methods