2013-07-31 32 views
0

如何做到這一點查詢教義2 QueryBuilder的選擇:?doctrine2從

SELECT AVG(x.distance)avg_distance FROM(SELECT R * FROM結果r WHERE r.place_id = GROUP BY r.place_id ORDER BY r.id DESC LIMIT 100

我試試這個:

$dql = $qb 
     ->select('r.*') 
     ->from('CoreBundle:Result', 'r') 
     ->where('r.place = :place') 
     ->orderBy('r.id', 'DESC') 
     ->setMaxResults(100) 
     ->setParameter('place', $place) 
     ->getDQL() 
; 

$result = $qb 
      ->select('AVG(x.distance) avg_distance') 
      ->from($dql, 'x') 
      ->getQuery() 
      ->getArrayResult(); 

但不起作用

SELECT r.* FROM': Error: Class 'SELECT' is not defined. 

回答

0
$sql = "SELECT AVG(x.distance) avg_distance FROM (SELECT r.* FROM result r WHERE r.place_id = :place_id ORDER BY r.id DESC LIMIT 100) x "; 

$stmt = $this->em->getConnection()->prepare($sql); 
$stmt->bindValue(':place_id', $place->getId()); 
$stmt->execute(); 
return $stmt->fetch();