2013-03-15 115 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();