我有一个非常复杂的Doctrine关系架构,这是一个令人头疼的问题。它是这样写的:
项目 [OneToMany, Bidirectional]
里程碑
里程碑 [OneToMany, Bidirectional]
Sprint
Sprint [OneToMany, Bidirectional]
票证
因此,Ticket直接依赖Sprint,但不是项目或里程碑。它几乎就像一个树层次结构。它很棒。但是,我遇到了严重的问题:
答案 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();