如何从第二对多关系中获取相关对象?

时间:2015-02-12 07:16:09

标签: php symfony orm doctrine

如果有三个实体:学生,课程和主题,则相关如下:

Student <-> Class: many-to-many(一名学生参加多个班级,一个班级由多名学生参加)

Class <-> Topic: many-to-many(一个课程涵盖多个主题,主题涵盖多个课程)

使用Doctrine,我很容易实现$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);
}

1 个答案:

答案 0 :(得分: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();