2017-04-07 7 views
0

私は最初のsymfonyプロジェクトをプログラミングしていますが、問題が残っています: エンティティを持っています。 xトランザクションは1つの負荷に属します)。Symfonyは、削除済みのフラグが立てられていないネストされたエンティティを取得します

/** 
* @ORM\OneToMany(targetEntity="Transaction", mappedBy="load")  
* 
*/ 
    private $transactions; 

トランザクションは削除済みとしてフラグが立てられますが、データベースに保存されます。 私はカスタムリポジトリと、削除されていないトランザクションを私に届けるいくつかのメソッドを作成しました。

しかし、私は、それは取引だすべてに負荷を取得したい場合、私はそれを想定し何を

$load = $loadRepository->find($id); 

呼び出します。指定されたロードを参照するデータベースからすべてのトランザクションをフェッチします。

しかし、削除したトランザクションを自分の結果に残したくないのです。どのように私はこれを達成することができますか?私は絶対にアプローチがありません。確かに、私はトランザクションを処理し、削除されたものを削除することができますが、私はより良い解決策があると思います。

トランザクションのリポジトリを登録しようとしましたが(これは機能します)、findメソッドをオーバーライドしました(これは機能しません)。 内部的に呼び出され、オーバーライドする必要がある別のメソッドがありますか?

ありがとうございます!

+0

カスタムを作成しようとしましたかリポジトリメソッド? 'findUndeleted'のようなもの? –

+0

私の前のコメントを破棄してください:コレクションをフィルタリングするためにdoctrineの機能を試しましたか?参照:http://docs.doctrine-project.org/projects/doctrine-orm/ja/latest/reference/working-with-associations.html#filtering-collections –

+0

解決策のようです。試してみます! –

答えて

0

私は解決策が見つかりました:削除された値が0でない場合

#config.yml: 

doctrine: 
    orm: 
     filters: 
      deletedFilter: 
       class: AppBundle\Filter\SoftDeletedFilter 
       enabled: true 

_

namespace AppBundle\Filter; 
use Doctrine\ORM\Mapping\ClassMetaData, 
Doctrine\ORM\Query\Filter\SQLFilter; 

class SoftDeletedFilter extends SQLFilter 
{ 
    public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) 
    { 

     if(!is_subclass_of($targetEntity->rootEntityName, "AppBundle\Entity\SoftDeleteableInterface")){ 
      return ""; 
     } 
     return $targetTableAlias.'.deleted = 0'; 
    } 
} 

は今、(空の)インターフェース "SoftDeleteableInterface" を実装し、すべてのエンティティが含まれません。

とにかく答え/コメントありがとうございました

1

私が正しくあなたの質問を理解している場合は、この動作はすでに教義拡張子SoftDeletableで存在し、あなたがドキュメントhere

を見つけることができますあなたは自分のTransactionエンティティにdeleteAtプロパティのようなものを追加するために内部のデータを持つすべてのエンティティを持っていますこのフィールドは実際に削除された場合と同様に自動的にフィルタリングされます。すべてのトランザクションエンティティを検索する場合は、常にクエリのフィルタを無効にすることができます。

+0

ありがとうございますが、私は拡張機能を使用せずに解決策を見つけました –