2015-10-06 62 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(); 

順便說一下,使用單個字母作爲別名是邪惡邪惡的做法。