Php Symfony2:暂时禁用软删除

Php Symfony2:暂时禁用软删除,php,symfony,Php,Symfony,我想暂时禁用softdelete,这样我可以按ID查找已删除的实体,然后在单元测试中真正删除它们(以确保不会阻塞数据库) 我尝试的是: $this->em->getFilters()->disable('softdeletable'); $item = $repository->findOneById($id); //fetch the item which was soft-deleted $this->em->remove($item); $this-&g

我想暂时禁用softdelete,这样我可以按ID查找已删除的实体,然后在单元测试中真正删除它们(以确保不会阻塞数据库)

我尝试的是:

$this->em->getFilters()->disable('softdeletable');
$item = $repository->findOneById($id); //fetch the item which was soft-deleted
$this->em->remove($item);
$this->em->flush();
但这带来了一个错误:

InvalidArgumentException : Filter 'softdeletable' is not enabled.
我还尝试了禁用('soft-deletable')和禁用('soft-deletable')等-没有任何效果。但是当我看$this->em->getFilters()时,过滤器就在那里:

["enabledFilters"]=>
  array(1) {
    ["softdeletable"]=>
      string(48) "Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter"
  }
在没有禁用的情况下尝试代码当然也不起作用:

Doctrine\ORM\ORMInvalidArgumentException : EntityManager#remove() expects parameter 1 to be an entity object, NULL given.
我做错了什么?我知道我可以通过将deletedAt设置为new DateTime来删除某些内容,但如何在不先获取项目的情况下删除项目

谢谢你的帮助

最初是一条评论….


你是在循环中使用这个还是什么?
如果是,过滤器可能已经被禁用

您可以在禁用之前检查它是否已启用,如果喜欢

$this->em->getFilters()->isEnabled('softdeleteable'))...
最初是一条评论……


你是在循环中使用这个还是什么?
如果是,过滤器可能已经被禁用

您可以在禁用之前检查它是否已启用,如果喜欢

$this->em->getFilters()->isEnabled('softdeleteable'))...

你是在循环中使用这个还是什么?如果是,过滤器可能已经被禁用。如果($this->em->getFilters()->>isEnabled('softdeleteable'))…@Chi您能试试
$filters=$this->getContainer()->get('doctrine')->getEntityManager()->getFilters()吗$过滤器->禁用('softdeleteable')
并告诉我您是否有错误?您能在此处提供一个答案,以获得接受的答案吗?@lolmx将其作为答案发布;)你是在循环中使用这个还是什么?如果是,过滤器可能已经被禁用。如果($this->em->getFilters()->>isEnabled('softdeleteable'))…@Chi您能试试
$filters=$this->getContainer()->get('doctrine')->getEntityManager()->getFilters()吗$过滤器->禁用('softdeleteable')
并告诉我您是否有错误?您能在此处提供一个答案,以获得接受的答案吗?@lolmx将其作为答案发布;)