2015-02-12 175 views
1

如果有三个实体:学生,课程和主题,这是关系如下:如何从第二个多对多关系中获取相关对象?

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); 
} 

回答

2

我想最好的办法就是运行一个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(); 
+1

谢谢,一旦我找到正确的地方来使用你的代码并对其进行调整,它就像魅力一样。 – Jens 2015-02-12 07:55:20

相关问题