使用嵌套的ManyToOne和OneToMany查询复杂的Doctrine关系

时间:2013-03-15 01:59:48

标签: php symfony doctrine-orm doctrine

我有一个非常复杂的Doctrine关系架构,这是一个令人头疼的问题。它是这样写的:

项目 [OneToMany, Bidirectional] 里程碑

里程碑 [OneToMany, Bidirectional] Sprint

Sprint [OneToMany, Bidirectional] 票证

因此,Ticket直接依赖Sprint,但不是项目或里程碑。它几乎就像一个树层次结构。它很棒。但是,我遇到了严重的问题:

  • 我如何发现特定项目的所有门票?
  • 我如何发现特定里程碑的所有门票?

1 个答案:

答案 0 :(得分: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();