2016-10-05 109 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'))...