Symfony2/Doctrine2でモデリングの問題があります。私は現在、以前のPHPフレームワークからSymfony2にWebサイト全体を渡そうとしています。以前のフレームワークには、好きな概念がありますが、SymfonyとDoctrineでモデル化することはできません。
これが私の問題です。前者のフレームワークでは、クラスAのオブジェクトを他のクラス(B、C、D ...)の他のオブジェクトにリンクすることが可能です。これを行うために、クラスAには、オブジェクトがリンクされているクラスを知るための属性model_id(各クラスの構成ファイルで定義された一意のIDに対応)と、リンクされたオブジェクトの外部IDである属性record_idがあります。 。このようにして、たとえば、クラスCommentを作成し、任意のオブジェクト(ブログ投稿、ユーザーなど)に関するコメントを作成することができます。
これらの一般的なリンクをDoctrineの関係(ManyToOneなど)でモデル化することは不可能に思われるため、前のフレームワークのように、一種のグローバルメソッド、またはたとえばgetItemと呼ばれる各クラスのメソッドを使用することを考えました。 model_idとrecord_idを属性付けしてから、適切なオブジェクトを返します。
しかし、再び私は問題を抱えていました:
Entityクラスのデータベースにアクセスする必要がないため、Entityでこのメソッドを直接定義することはできません。
グローバルサービスで1回定義するか、リポジトリ内のクラスごとにn回定義すると(今回はデータベースにアクセスできるため可能です)、エンティティコード以外のすべての場所でメソッドを呼び出すことができます。また、前の例では、コメントにアクセスする必要のあるエンティティのすべてのメソッドをエンティティからリポジトリに移動する必要があるため、実装がかなり醜いものになります。そして最後に、エンティティに直接ではなく、リポジトリにほとんどすべてのオブジェクトメソッドを配置します。
オブジェクトを他のオブジェクトに一般的にリンクし、リンクされたオブジェクトを「通常の」教義の関係のように簡単に回復できるこのようなシステムをどのように作成できるかについて、何か考えがありますか?
よろしくお願いします。