我阅读了Symfony
和Doctrine
的文档,但我仍然无法解决此问题。
我正在使用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 :(得分: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();
顺便说一下,使用单个字母作为别名是邪恶邪恶的做法。