Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony:无法在带有phpunit的测试套件中删除分离的实体_Php_Symfony_Doctrine Orm_Phpunit - Fatal编程技术网

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

Symfony:无法在带有phpunit的测试套件中删除分离的实体,php,symfony,doctrine-orm,phpunit,Php,Symfony,Doctrine Orm,Phpunit,实际上,我正在对我的api进行一些函数测试,我面临着一个我并不真正理解的问题 我想测试一个与远程web托管服务器交互的API。目标是管理虚拟主机、DNS区域、数据库等。。。 我有一个测试远程服务器,为了避免冲突,我在测试后删除创建的内容(在TearDown()函数中)并创建基础(在setUp()函数中)。在setUp()中,我还将夹具加载到设置中 在添加我的主实体的子实体的测试之后,我想清理远程服务器: $service = $this->fixtures->getReference

实际上,我正在对我的api进行一些函数测试,我面临着一个我并不真正理解的问题

我想测试一个与远程web托管服务器交互的API。目标是管理虚拟主机、DNS区域、数据库等。。。 我有一个测试远程服务器,为了避免冲突,我在测试后删除创建的内容(在
TearDown()
函数中)并创建基础(在
setUp()
函数中)。在
setUp()
中,我还将夹具加载到设置中

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

$service = $this->fixtures->getReference('service-web');
$this->container->get('webmanager')->deleteHosting($service, true);
deleteHosting()
函数删除所有远程内容(true参数是“force”参数,它确保函数在发生错误后不会停止

$service
变量包含我的主服务实体。我在这个实体中还与
addonDomain
的实体有一对多的关系。 我的Functional测试创建一个附加域。 测试正常,但当我尝试删除我的服务时,附加的实体会让条令大喊大叫:
条令\ORM\ORMInvalidArgumentException:Detached entity AppBundle\entity\service\Web\AddonDomain@0000000054814da900000000073c524a无法删除

我尝试了很多方法,但没有一种有效(即:使用条令管理器来检索实体,而不是使用夹具)

非常感谢你的帮助, 致以最良好的祝愿

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

虽然这是一个老问题,但我最近在使用Symfony 4.4时遇到了同样的问题,并帮助我解决了问题。基本上,正如@Can Vural所建议的,在删除之前调用merge就解决了问题lem,但缺少的一点是您必须再次分配实体,以便:

$entity = $doctrineManager->merge($detachedEntity);  
$doctrineManager->remove($entity);
$doctrineManager->flush();
这解决了我的问题


请记住,
merge
已被弃用,并将在原则3中删除:

我也有同样的问题,不知道如何解决:/就像一年前发生的那样,我记不太清楚。但正如在原始帖子中更新的那样,与其使用
$this->container
,不如在两个中都使用
self::$container
de>setUp()和
tearDown
方法。希望这能有所帮助。在对实体调用
remove
之前,我通过调用
merge
解决了这个问题。不确定这是否是最好的方法,但它能起作用!不过感谢您的回复!使用
$this->em=static::$kernel->getContainer()->get('doctor.orm.entity\u manager')时没有任何更改
$this->em=$this->client->getContainer()->get('doctrine.orm.entity_manager');
甚至没有
em->merge(…)
。我的实体只有在逐个实体刷新时才被删除,而不是在单个
刷新时被删除。
合并已被弃用,并将在条令3中删除: