我实际上正在对我的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
。
我尝试了很多东西,但没有一个能够工作(即:使用教条管理器来检索实体而不是使用夹具。
非常感谢你的帮助, 最好的问候。
解决了! 实际上,我使用的是测试类的容器和实体管理器,而不是客户端本身。那就是问题......
答案 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