塩焼きブログ

塩焼きに関しての研究内容を公開しています

Symfony3でSoftDeleteableを一時的に無効にする

Symfony3にはSoftDeleteableという論理削除機能があります。指定したフィールドがnullで削除していないとし、nullでなければ削除したとして扱ってくれますので、オペレーションミスによってデータが消えても復元可能にできるわけです。

ただし、管理者側ではデータを完全削除したい場合があります。この時だけはSoftDeleteableを無効にして論理的に削除されているレコードも表示して選択的に削除させたいです。

Symfony3はこういったケースにも対応することができます。

$em = $this->getDoctrine()->getManager();
$em->getFilters()->disable('softdeleteable');

$itemRepository = $this->getDoctrine()->getRepository('AppBundle:Item');
$items = $itemRepository->getItem($tag);

最初このdisableの所にsoft-deleteableって書いたら以下のようなエラーが出てしまいました。

{"code":500,"message":"Filter 'soft-deleteable' is not enabled."}

Symfony2の時の書き方なのかな?以下のページのおかげで助かりました。 https://github.com/Atlantic18/DoctrineExtensions/issues/1159