2 つの Doctrine エンティティがあるとします。
ユーザーとメッセージ
すべてのユーザーは「n」個のメッセージを持つことができます。
ここで、ユーザーのメールボックスを表示したいので、ORM からユーザー エンティティを取得し、このエンティティからすべてのメッセージを取得します。今のところ問題ありません。
しかし、今はメッセージのより複雑なフィルタリングが必要です。例: 最大年齢、最大カウント、いくつかの単語のブラックリスト登録など。したがって、メッセージを取得するためのエンティティの既定の getter メソッドでは十分ではありません。
どうすればこれを解決できますか?
エンティティ リポジトリは私が最初に見つけたものですが、ユーザーとメッセージの関係を壊すユーザー オブジェクトの外部からこのリポジトリに問い合わせる必要があります (user->getMessages( ではなく repository->getMessagesForUser(userId,...))。 ...)) 私にとっては「クリーンな」OOP ソリューションとは思えません。
私が考えることができる別の方法は、この手の込んだ ORM をすべて無視して、独自のモデルを作成し、最下層の ORM または DBAL レイヤーでデータベースから情報を取得することです。そして、エンティティをエーテルでラップするか、自分のモデルのフィールドを手動で埋めます。しかし、「なぜDoctrineを使用したのですか?」と自問します。
では、この場合のベストプラクティスは何ですか。ちなみにSymfony2を使っています。