2017-09-14 6 views
0

フォームの選択フィールドに1つのオプションを表すDoctrineエンティティ(FieldOption)があります(RedGreenBlueなど)。ユーザーはいつでもフィールドからオプションを削除することができます(たとえば、Greenを削除します)。このため、完全に機能するGedmoを使用してエンティティをソフト削除可能に設定しました。Doctrine Soft Delete - 1つを除くすべてのコンテキストで削除されたエンティティを返します

フォームの少なくとも1つの送信に対して保存されたオプションが削除された場合、FieldOptionが除外されたため、そのサブミットエンティティ(FieldOptionエンティティとの関係を持ちます)が読み込まれません。実際には、フォームをレンダリングするためのデータを返すときにソフト削除機能が必要になります。そのエンティティにリンクされている既存のレコードを表示すると、デフォルトではソフト削除されたオプションを読み込めるようになります。

別のエンティティで取得したときにこのフィルタを無効にする方法はありますか?ただし、オプションのリストを直接ロードするときにフィルタが有効になっていることを確認してください。

+0

多分あなたはDoctring SQLFilter(HTTPを使用して、独自のフィルタを書くことができますproject.org/projects/doctrine-orm/en/latest/refere nce/filters.html)? – Sepultura

+0

これを解決できましたか? – Nukeface

+0

私は@Nukefaceをやったとは思わない - それについて考えてみると、これは本当にソフト削除の有効な使い方であるとは思わない(真の削除と同じように扱うべきだから)。これを処理するカスタムプロパティとdoctrineフィルタ –

答えて

0

Sepulturaさんがコメントしたリンクには、フィルタを有効/無効にする方法と独自のカスタムフィルタを書き込む方法の例があります。

From the docs

例フィルタ:

<?php 
namespace Example; 
use Doctrine\ORM\Mapping\ClassMetaData, 
    Doctrine\ORM\Query\Filter\SQLFilter; 

class MyLocaleFilter extends SQLFilter 
{ 
    public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) 
    { 
     // Check if the entity implements the LocalAware interface 
     if (!$targetEntity->getReflectionClass()->implementsInterface('LocaleAware')) { 
      return ""; 
     } 

     return $targetTableAlias.'.locale = ' . $this->getParameter('locale'); // getParameter applies quoting automatically 
    } 
} 

ドキュメントも(そう、あなたがそれを無効/有効にすることができます)このフィルタを追加するために、次のコード行を使用するように言う:

$config->addFilter("locale", "\Doctrine\Tests\ORM\Functional\MyLocaleFilter"); 

しかし、このフィルタをどこにでも使用したい場合は、このコード行をあらゆる場所で必要な場所に配置し、$configにアクセスする必要がありますDoctrineのConfigurationオブジェクトがあります)。

あなたがコア/ MVCモジュールまたはアプリケーションの構成に以下の構成を追加することができZend Frameworkの2及び3において

'doctrine' => [ 
    'configuration' => [ 
     'orm_default' => [ 
      'filters' => [ 
       'locale' => MyLocaleFilter::class, 
      ], 
     ], 
    ], 
], 

コードと構成の上の行このフィルタを有効に、Aに無効にします特定の場所、あなたは()最初は&設定するを可能にします(ドキュメントごとに)無効にする次の行を使用します。//docs.doctrine-:

<?php 
$filter = $em->getFilters()->enable("locale"); 
$filter->setParameter('locale', 'en'); 

// Disable it 
$filter = $em->getFilters()->disable("locale"); 
関連する問題