教义多对多选择

时间:2015-10-06 14:26:52

标签: php symfony doctrine-orm doctrine

我阅读了SymfonyDoctrine的文档,但我仍然无法解决此问题。

我正在使用Symfony2。正确设置了实体。

我有两个数据表: 学生们, 组

我也有映射表: students_group

我们说我有五个小组: G1,G2,G3,G4,G5

我想从g1,g2,g3

中选择所有学生

我该怎么做?

目前我有这段代码

public function filtered($array) {
    /* GET DOCTRINE */
    $repository = $this->getDoctrine()->getRepository('AppBundle:StudyGroups');
    $query = $repository->createQueryBuilder('a')
            ->andWhere('a.id IN (:ids)')
            ->setParameter('ids', $array)
            ->getQuery();

    $groups = $query->getResult();
    $students = $groups->getStudents();

    return $students;
}

由于组上没有getStudents()方法,因此无法正常工作。 但是,如果我做这样的事情

public function filtered($array) {
    /* GET DOCTRINE */
    $repository = $this->getDoctrine()->getRepository('AppBundle:StudyGroups');
    $query = $repository->createQueryBuilder('a')
            ->andWhere('a.id IN (:ids)')
            ->setParameter('ids', $array)
            ->getQuery();

    $groups = $query->getResult();
    $students = array();
    foreach ($groups as $group) {
        $students = $group->getStudents();
    }

    return $students;
}

它有效,但是有一个问题:我只是从最后一个foreach循环中获得学生。 我正在考虑创建一个数组,但这些是对象,并且合并不起作用。老实说,我认为有一个比这更简单的方法,我只是找不到它。任何的想法?

1 个答案:

答案 0 :(得分:0)

由于您需要学生,因此您应该向学生查询,加入群组并筛选特定群组。类似的东西:

$repository = $this->getDoctrine()->getRepository('AppBundle:Student');
$query = $repository->createQueryBuilder('student')
  ->leftJoin('student.groups','group')
  ->andWhere('group.id IN (:ids)')
  ->setParameter('ids', $groupIds)
  ->getQuery();
$students = $query->getResult();

顺便说一下,使用单个字母作为别名是邪恶邪恶的做法。