Search code examples
symfonydql

Semantical Error, Symfony DQL


I have a query that perform normally with MySQL :

SELECT *
FROM td_user u
JOIN td_ranking ranking ON ranking.user_id = u.id
JOIN (
 SELECT x.user_id,
 MAX(x.id) AS default_id
 FROM td_ranking x
 GROUP BY x.user_id
) y 
ON y.user_id = ranking.user_id
AND y.default_id  = ranking.id

I try to transform it in DQL for run it in Symfony :

$query = $this->_em->createQuery('
  SELECT u.*,ranking.* 
  FROM UserBundle:User u 
  JOIN UserBundle:Ranking ranking 
  WITH ranking.user_id = u.id 
  JOIN (
    SELECT x.user_id, MAX(x.id) AS default_id 
    FROM UserBundle:Ranking x 
    GROUP BY x.user_id
  ) y 
  ON y.user_id = ranking.user_id 
  AND y.default_id  = ranking.id' 
);
$results = $query->getResult();

I have this error :

[Semantical Error] line 0, col 113 near '(SELECT x.user_id,': Error: Class '(' is not defined.

Do you have any idea please ? Thanks!


Solution

  • Use native query

    $rsm = new ResultSetMapping();
    $sql = " 
        SELECT *
    FROM td_user u
    JOIN td_ranking ranking ON ranking.user_id = u.id
    JOIN (
     SELECT x.user_id,
     MAX(x.id) AS default_id
     FROM td_ranking x
     GROUP BY x.user_id
    ) y 
    ON y.user_id = ranking.user_id
    AND y.default_id  = ranking.id
    ";
    
    $result = $this->getEntityManager()->createNativeQuery($sql, $rsm)->getResult();