实际上,我正在对我的api做一些功能测试,我面临着一个我不太明白的问题。
我想测试一个与远程虚拟主机服务器交互的API。目标是管理VirtualHosts、DNS区域、数据库等...我有一个测试远程服务器,为了避免冲突,我在测试后删除了创建的东西(在TearDown()
函数中),并创建了基础(在setUp()
函数中)。在setUp()
中,我还在设置中加载了fixture。
在一次测试后,其中添加了我的主实体的一个子实体,我想清理远程服务器:
$service = $this->fixtures->getReference('service-web');
$this->container->get('webmanager')->deleteHosting($service, true);
deleteHosting()
函数删除所有远程内容(true参数是“force”参数,它确保函数在出错后不会停止。$service
变量包含了我的主服务实体。在这个实体中,我还与addonDomain
的实体有一个一对多的关系。我的函数测试创建了一个addonDomain。测试是好的,但是当我试图删除我的服务时,附加的实体让Doctrine大叫:Doctrine\ORM\ORMInvalidArgumentException: Detached entity AppBundle\Entity\Service\Web\AddonDomain@0000000054814da900000000073c524a cannot be removed
.
我尝试了很多方法,但没有一种方法有效(即:使用原则管理器来检索实体而不是使用固定装置。
非常感谢你的帮助,致以最诚挚的问候。
解决了!事实上,我使用的是测试类的容器和实体管理器,而不是客户端本身。这就是问题所在...
2条答案
按热度按时间gmol16391#
虽然这是一个老问题,但我最近在使用Symfony 4.4时遇到了同样的问题,Detached entity error in Doctrine帮助我解决了这个问题。基本上,正如@Can Vural所建议的,在 remove 之前调用 merge 可以解决这个问题,但缺少的一点是必须再次分配实体,因此:
这解决了我的问题。
请记住,
merge
已被弃用,并将在原则3中删除:https://github.com/doctrine/orm/blob/master/UPGRADE.md#bc-break-removed-entitymanagermerge-and-entitymanagerdetach-methodsmrphzbgm2#
我遇到了同样的问题,
merge
在功能测试中没有为我解决这个问题,所以我再次查询实体,然后删除它们: