Формат: JOIN (SELECT) с доктриной createQueryBuilder или createQuery - PullRequest
0 голосов
/ 13 апреля 2019

Я пробовал этот запрос в 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,
    ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...