Doctrine 2のエンティティに、私が頻繁に実行しなければならないコードを含めるために、いくつかの追加機能を追加したいと思います。たとえば:Doctrine 2エンティティメソッドに便利なクエリを含めることはできますか?
ユーザー - 多くの投稿
ポストを持っている - シングルユーザー私はすでに機能$user->getPosts()
を持って
を持っているが、これは私の記事のすべてを返します。
$user->getPosts()->where('active = true') //if this were possible
か::私はのようになる$user->getActivePosts()
、書くために探しています私の知る限り
$em->getRepository('Posts')->findBy(array('user'=>$user,'active'=>true)) //if this were more convenient
を、エンティティけれどもエンティティマネージャに戻って取得する方法はありません自身、ので、私の唯一のオプションは
class User {
function getActivePosts() {
$all_posts = $this->getPosts();
$active_posts = new ArrayCollection();
foreach ($all_posts as $post) {
if ($post->getActive()) {
$active_posts->add($post);
}
}
return $active_posts;
}
だろうしかし、私は実際にはそれらの小さなサブセットをしたいとき、これは、私のエンティティマネージャにすべてのポストをロードするために私を必要とし、それがPHPでフィルタリングを行うために私を必要としそれがm SQLレイヤーでこれを行うのが適切です。エンティティの中で何をしようとしているのかを達成する方法はありますか?あるいは、それ以外のコードを作成する必要がありますか?
正しいよう
何か。エンティティマネージャーをエンティティの内部に配置する傾向があるときはいつでも、一歩前進して何らかのサービスやリポジトリで何をしているのかを考えるときがあることは分かっています。 OPの場合、Postsコレクションをフィルタリングしたいだけなら、$ this-> postsをループして配列を取り込むことでEntityでそれを行うことができます - きれいできれいですが、ローディング/ハイドレーティングが必要なので非常に効率的ではありませんすべてのユーザーの投稿 – timdev
Postエンティティが独自のfindActivePosts()メソッド内でPostRepository :: findActiveByUser()を呼び出すことは悪い習慣と考えられますか? –