Symfony2:暂时禁用softdelete

时间:2016-10-05 07:45:15

标签: 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->em->flush();

但这会引发错误:

InvalidArgumentException : Filter 'softdeletable' is not enabled.

我还尝试过禁用('软删除')和禁用('软可删除')等 - 没有任何效果。但是当我查看$ 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来删除某些内容,但如何在不先获取项目的情况下删除项目?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

最初是评论....

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

您可以在禁用之前检查是否已启用if if ...

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