我想暂时禁用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来删除某些内容,但如何在不先获取项目的情况下删除项目?
感谢您的帮助!
答案 0 :(得分:1)
最初是评论....
你是在循环中使用它还是什么?
如果是这样,过滤器可能已被禁用。
您可以在禁用之前检查是否已启用if if ...
$this->em->getFilters()->isEnabled('softdeleteable'))...