2013-03-15 81 views
2

我有一个相当复杂的学说关系架构,这是一个头痛的查询。它是这样写的:查询复杂的学说与嵌套ManyToOne和OneToMany的关系

项目[OneToMany, Bidirectional]里程碑

里程碑[OneToMany, Bidirectional]冲刺

冲刺[OneToMany, Bidirectional]票务

所以,票据对Sprint有直接的依赖关系,但不是项目或里程碑。它几乎就像一个树层次结构。它效果很好。然而,我有严重的问题:

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

回答

2

使用Doctrine查询生成器,你可以从这样一个项目的所有门票:

$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();