2016-10-05 111 views
0

我想暂时禁用softdelete,这样我就可以通过ID找到删除的实体,然后在真我的单元测试(所以要确保我不会堵塞数据库)删除它们。的Symfony2:暂时禁用softdelete

我的尝试:

$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. 

我也尝试禁用( '软删除的')和禁用( '软可删除')等 - 没有工作。但是,当我看到这 - $> 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新的日期时间,但我怎么删除一个项目而不先取得它?

感谢您的帮助!

+1

你在一个循环或使用的东西使用此之前禁止启用,您可以为做检查?如果是这样,过滤器可能已被禁用。 ( - >的IsEnabled( 'softdeleteable')$这个 - > EM-> getFilters())...' – qooplmao

+1

@Chi可以尝试'$过滤器= $对于无论是之前使用'如果禁用启用你可以做的检查这 - > getContainer() - >获取( '主义') - > getEntityManager() - > getFilters(); $ filters-> disable('softdeleteable');'告诉我你是否有错误? – lolmx

+0

您能否在这里提供一个可以得到认可的答案? – LBA

回答

1

本来评论....

你在一个循环或使用的东西呢?
如果是这样,过滤器可能已被禁用。

无论是若是喜欢...

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