如何从第二个多对多关系中获取相关对象?
问题描述:
如果有三个实体:学生,课程和主题,这是关系如下:如何从第二个多对多关系中获取相关对象?
Student <-> Class: many-to-many
(学生参加多个类和类是由多个学生参加)
Class <-> Topic: many-to-many
(一类涉及多个主题和一个主题涵盖在多个类别)
随着学说我管理相当容易实施$student->getClasses()
或$class->getTopics()
。
实施$student->getTopics()
的最佳方法是什么?
下工作,但似乎并不权:
public function getTopics()
{
$topics = array();
foreach ($student->getClasses() as $class) {
$topics = array_merge($topics, $class->getTopics());
}
return array_unique($topics);
}
答
我想最好的办法就是运行一个DQL,而不是循环每个班并获得主题
$DM = $this->getDoctrine()->getManager();
$query = $DM->createQueryBuilder('t')
->select('t')
->from('NamespaceYourBundle:Topic', 't')
->innerJoin('t.class','c')
->innerJoin('c.student','s')
->where('s.id = :id')
->setParameter(':id',$student_id)
->getQuery();
$topics= $query->getResult();
谢谢,一旦我找到正确的地方来使用你的代码并对其进行调整,它就像魅力一样。 – Jens 2015-02-12 07:55:20