Я пробовал этот запрос в phpmyadmin (консоль SQL), он работает очень хорошо, я хочу сделать это с помощью createQueryBuilder (совет 1) или createQuery (совет 2) с Symfony Doctrine
SELECT * FROM inscription_etudiant t
JOIN ( SELECT etudiant_id, max(inscription_etudiant.date_inscription) as MaxDate
FROM inscription_etudiant
GROUP BY etudiant_id ) tm
ON t.etudiant_id = tm.etudiant_id AND t.date_inscription = tm.MaxDate
JOIN etudiant e ON e.id = t.etudiant_id
JOIN classe c ON c.id = t.classe_id
Я попробовал второй совет, но получил синтаксическую ошибку ==> Семантическая ошибка] строка 0, столбец 100 рядом с '(SELECT r, max (inscription_etudiant.date_inscription)': Ошибка: Class '(' не определено.
Я хочу сформулировать этот запрос хотя бы одним из методов, любые предложения, пожалуйста
public function indexGridAction()
{
$em = $this->getDoctrine()->getManager();
//Tip 1
$inscriptionEtudiantRepository = $em->getRepository('AdminBundle:InscriptionEtudiant');
$query = $inscriptionEtudiantRepository->createQueryBuilder('p')
->select('t')
->from('AdminBundle:InscriptionEtudiant', 'inscription')
//->addSelect() ??
->join('inscription.etudiant','etudiant')
->join('inscription.classe','classe')
->groupBy('inscription.etudiant')
->orderBy('inscription.dateInscription', 'DESC')
->getQuery();
// Tip 2
$query2 = $em->createQuery("
SELECT t, tm, c, e FROM AdminBundle:InscriptionEtudiant t
JOIN(SELECT r, max(inscription_etudiant.date_inscription) as MaxDate
FROM AdminBundle:InscriptionEtudiant r
GROUP BY etudiant_id ) tm
ON t.etudiant_id = tm.etudiant_id AND t.date_inscription = tm.MaxDate
JOIN AdminBundle:Etudiant e ON e.id = t.etudiant_id
JOIN AdminBundle:Classe c ON c.id = t.classe_id
");
$inscriptions = $query2->getResult();
return $this->render('@Admin/etudiant/index_grid.html.twig', array(
'inscriptions' => $inscriptions,
));
}