2

私は非常に複雑な Doctrine リレーションシップ アーキテクチャを持っています。次のように書かれています。

プロジェクト [OneToMany, Bidirectional] のマイルストーン

マイルストーン [OneToMany, Bidirectional] スプリント

スプリント [OneToMany, Bidirectional] チケット

したがって、チケットはスプリントに直接依存しますが、プロジェクトやマイルストーンには依存しません。それはほとんどツリー階層のようなものです。それはうまくいきます。ただし、次の点で深刻な問題があります。

  • 特定のプロジェクトのすべてのチケットを見つけるにはどうすればよいですか?
  • 特定のマイルストーンからすべてのチケットを見つけるにはどうすればよいですか?
4

1 に答える 1

2

Doctrine Query Builder を使用すると、次のようにプロジェクトからすべてのチケットを取得できます。

$project_id = ...

$repository = $this->getDoctrine()->getRepository('AcmeBundle:Ticket');

$query = $repository->createQueryBuilder('t')
                    ->join('t.sprint', 's')
                    ->join('s.milestone', 'm')
                    ->join('m.project', 'p')
                    ->where('p.id = :project_id')
                    ->setParameter('project_id', $project_id)
                    ->getQuery();

そして、これはマイルストーンからすべてのチケットを取得する方法です:

$milestone_id = ...

$repository = $this->getDoctrine()->getRepository('AcmeBundle:Ticket');

$query = $repository->createQueryBuilder('t')
                    ->join('t.sprint', 's')
                    ->join('s.milestone', 'm')
                    ->where('m.id = :milestone_id')
                    ->setParameter('milestone_id', $milestone_id)
                    ->getQuery();
于 2013-03-15T03:31:05.303 に答える