2016-10-05 12 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. 

私も( 'ソフト削除可能')を無効にしようとしたなど( 'ソフト削除可能')を無効 - 何も働かなかった。私はの$ this - > 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. 

何私は間違っている?私は本当に新しいDateTimeにdeletedAtを設定して何かを削除することができますが、最初にそれをフェッチせずにアイテムを削除するにはどうすればよいですか?

ありがとうございました!

+1

あなたはループか何かでこれを使用していますか?その場合、フィルタは既に無効になっている可能性があります。あなたは 'if($ this-> em-> getFilters() - > isEnabled( 'softdeleteable'))を使って無効にする前に有効になっているかどうかチェックすることができます... – qooplmao

+1

@Chi' $ filters = $ this-> getContainer() - > get( 'doctrine') - > getEntityManager() - > getFilters(); $ filters-> disable( 'softdeleteable'); 'あなたにエラーがある場合は教えてください。 – lolmx

+0

あなたは受け入れられたものを得ることができるここで答えを提供してもらえますか? – LBA

答えて

1

もともとコメント....

あなたはループか何かでこれを使用していますか?
この場合、フィルタはすでに無効になっている可能性があります。あなたが好きな場合は使用して無効にする前に、それが有効になっているかどうかのチェックを行うことができ

...

$this->em->getFilters()->isEnabled('softdeleteable'))... 
関連する問題