2

我有一个非常复杂的 Doctrine 关系架构,查询起来很头疼。它是这样写的:

项目 [OneToMany, Bidirectional] 里程碑

里程碑 [OneToMany, Bidirectional] 冲刺

冲刺 [OneToMany, Bidirectional]

因此,工单直接依赖于 Sprint,而不是项目或里程碑。它几乎就像一个树层次结构。它工作得很好。但是,我在以下方面遇到严重问题:

  • 我如何发现来自特定项目的所有票证?
  • 我如何发现特定里程碑的所有门票?
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 回答