2013-03-07 13 views
5

Normalerweise zurückkehren, wenn ich eine DQL-Abfrage wie unten laufen würde es eine Liste von Unternehmen zurückgeben Objekte:DQL eine Reihe von Einheiten anstelle von Objekten

$d = $this->getDoctrine()->getRepository('xxxWebsiteBundle:Locations')->createQueryBuilder('l'); 
      ->where('l.enabled = :enabled') 
      ->setParameter('enabled', 1) 
     $result= $d 
      ->getQuery(); 

Wenn ich jedoch eine Auswahl hinzufügen dann wird ein Array :

$d = $this->getDoctrine()->getRepository('XXXWebsiteBundle:Locations')->createQueryBuilder('l'); 
     $d 
      ->select('l') 
      ->addSelect(
      '(3959 * acos(cos(radians(' . $latitude . '))' . 
       '* cos(radians(l.latitude))' . 
       '* cos(radians(l.longitude)' . 
       '- radians(' . $longitude . '))' . 
       '+ sin(radians(' . $latitude . '))' . 
       '* sin(radians(l.latitude)))) as distance' 
     ) 
      ->where('l.enabled = :enabled') 
      ->setParameter('enabled', 1) 
      ->having('distance < :distance') 
      ->setParameter('distance', $requestedDistance) 
      ->orderBy('distance', 'ASC'); 
     $closeresult= $d 
      ->getQuery(); 

So die erste Abfrage konnte ich folgendes tun:

foreach($result->getResult() as $location){ 
    echo $location->getName() 
} 

jedoch die zweite q mit ich muss folgendes verwenden, von dem ich annehme, dass es nicht korrekt ist:

foreach($result->getResult() as $location){ 
     echo $location[0]->getName() 
    } 

Irgendwelche Ideen, wie ich das verbessern kann?

Antwort

9

Seit Doctrine ORM 2.2 können Sie das Schlüsselwort HIDDEN verwenden.

$d = $this 
    ->getDoctrine() 
    ->getRepository('XXXWebsiteBundle:Locations') 
    ->createQueryBuilder('l'); 

$d 
    ->select('l') 
    ->addSelect(
     '(3959 * acos(cos(radians(' . $latitude . '))' . 
      '* cos(radians(l.latitude))' . 
      '* cos(radians(l.longitude)' . 
      '- radians(' . $longitude . '))' . 
      '+ sin(radians(' . $latitude . '))' . 
      '* sin(radians(l.latitude)))) AS HIDDEN distance' 
    ) 
    ->where('l.enabled = :enabled') 
    ->setParameter('enabled', 1) 
    ->having('distance < :distance') 
    ->setParameter('distance', $requestedDistance) 
    ->orderBy('distance', 'ASC'); 

    $closeresult = $d->getQuery(); 
+0

Ehrfürchtig:

SELECT a, SOME_EXPR() AS HIDDEN sortCond FROM Entity a ORDER BY sortCond DESC 

In Ihrem Beispiel wäre es wie folgt sein! Vielen Dank – user1961082

Verwandte Themen