2015-10-06 57 views
0

我看了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循环让学生。 我正在考虑创建一个数组,但这些都是对象,并且合并工作也不尽如人意。老实说,我认为有一个比这更简单的方法,我只是找不到它。任何想法?

回答

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

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