Symfony2:暂时禁用软删除功能


Symfony2: temporarily disable softdelete

我想暂时禁用软删除,这样我就可以通过ID找到被删除的实体,然后在我的单元测试中真正删除它们(以便确保我不会阻塞数据库)。

What I tried:

$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-deleteable')和禁用('soft-deleteable')等-没有工作。但是当我查看$this->em->getFilters()时,过滤器是THERE:

["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到新的DateTime的东西,但我如何删除一个项目,而不获取它第一?

谢谢你的帮助!

最初评论…

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

您可以在禁用之前使用if检查是否启用,如…

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