Php 多对多选择原则

Php 多对多选择原则,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我阅读了Symfony和条令的文档,但是我仍然无法解决这个问题 我正在使用Symfony2。实体设置正确 我有两个数据表: 学生, 团体 我也有映射表: 学生组 假设我有五个小组: g1、g2、g3、g4、g5 我想从g1、g2、g3中选择所有学生 我该怎么做 目前我有这个代码 public function filtered($array) { /* GET DOCTRINE */ $repository = $this->getDoctrine()->getRep

我阅读了
Symfony
条令
的文档,但是我仍然无法解决这个问题

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

我有两个数据表: 学生, 团体

我也有映射表: 学生组

假设我有五个小组: 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循环中获取学生。
我在考虑创建一个数组,但这些都是对象,合并也不起作用。老实说,我觉得有一个比这个更简单的方法,我就是找不到。有什么想法吗

既然你想要学生,那么你应该向学生查询,加入小组并筛选特定的小组。比如:

$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();
顺便说一下,使用单个字母作为别名是一种邪恶的做法