2015-10-20 15 views
6

1つのエンティティに対して2つのリポジトリを使用したいと思います。symfonyの1つのエンティティ、2つのリポジトリ

私は2つのバンドルを持っており、両方のバンドルが同じエンティティを使用しています。両方の機能を分離したいと思います。 特定のクエリをバンドルに入れる必要があることがあります。

1つのリポジトリをバンドルに、もう1つのリポジトリをもう1つのリポジトリに含めることは可能ですか? それは間違った方法でしょうか?

誰かがアイデアを持っている場合。

Thx!

+0

作品同じクラスのリポジトリを使いたいのですか?それは二つの異なる機能exempleについては なので、私は車のレンタルのためのサイトを作る場合 – scoolnico

+1

が、私はレンタル用のバンドルを持って、そしていつか私は は、私がバンドルレンタルを持っているいくつかの車を修理する必要があり、他の1つの修理、レンタルのクエリと修復のクエリを分けたい – lala

+0

したがって、レポに2つのメソッドを作成します。 – scoolnico

答えて

2

私は2つの別々のリポジトリを作成したいと思います。エンティティを共有するため、すべてのメソッドを1つのリポジトリに追加するのは意味がありません。このようなアプローチでリポジトリごとに30個のメソッドが完成します。

DDDでは、ロジック分離によってリポジトリ(サービス)を作成することをお勧めします。車を借りることは一つのことです、他のものなどを維持することです。

また、私は多分リポジトリから離れてカジュアルなサービスに移ります。 Model/Car/RepairManagerModel/Car/RentalManagerなど。

+0

私の最初のアイデアは、私はあなたのように思えるので、両方のアクティビティを分けることでした、それは2つの異なるものです。 私は2つのリポジトリを作成しようとしましたが、symfonyではORMアノテーション@ORM \ Entity(repositoryClass = "")を使用すると、1つのリポジトリしか持てないと思います。 – lala

+0

私が正しく理解していれば、レポではなくマネージャでクエリを行うことをお勧めしますか? – lala

+0

私は '@ORM \ Entity(repositoryClass =" ")'アプローチを使用しません。 並べ替えます。個人的に、私はこれらの2つのクラスで試してみると、次に何をすべきかは明らかです。 1つの大きなリポジトリを作成する前にすでに停止しているので、おそらくあなたのために行く方法です。 –

1

まあ(私はORMアノテーションではなく、意味)私は本当にそれは良い習慣だかわからないが、あなたがリンクされたエンティティなしでリポジトリを作成することができます

だから私はちょうど私のservice.ymlでこれを作成します。

renting.metadata.car: 
    class: Doctrine\ORM\Mapping\ClassMetadata 
    arguments: [ %car% ] 

そして、この:あなたは同じエンティティなぜドンを使用している場合だ

repair.repository.car: 
    class: carRepository 
    arguments: [@doctrine.orm.entity_manager, @renting.metadata.car] 

関連する問題