2016-01-01 1 views
3

У меня есть функция в Symfony3 с Doctrine2, который ищет ближайший партнер, используя широту и долготу:Получить неподключенное поле в родном запросе в Doctrine2

public function findNearestPartner($lat,$lng) { 

    $rsm=new ResultSetMappingBuilder($this->_em); 
    $rsm->addRootEntityFromClassMetadata('AppBundle\Entity\Partner','p'); 

    $sqlQuery="SELECT p.*, (6371 * acos(cos(radians(:lat)) * cos(radians(p.latitude)) * cos(radians(p.longitude) - radians(:lng)) + sin(radians(:lat)) * sin(radians(p.latitude)))) AS distance 
    FROM sp_partner p 
    ORDER BY distance ASC 
    LIMIT 0,1"; 

    $query=$this->_em 
     ->createNativeQuery($sqlQuery,$rsm) 
     ->setParameter('lat',$lat) 
     ->setParameter('lng',$lng) 
    ; 

    return $query->getOneOrNullResult(); 
} 

Как вы видите, я получаю ближайший партнер -Entity назад - но есть также поле «расстояние», которое я не верну (но это было бы очень полезно). Есть ли способ получить значение этого поля? Я читал в документе (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html), но я не могу найти ничего полезного для этого случая.

ответ

3

Вы можете пройти через addScalarResult.

$rsm=new ResultSetMappingBuilder($this->_em); 
$rsm->addRootEntityFromClassMetadata('AppBundle\Entity\Partner','p'); 
$rsm->addScalarResult('distance', 'distance'); 

результат будет

array:2 [▼ 
    0 => Partner{...}, 
    distance => xxx 
] 
+0

Большое спасибо! – cklm

Смежные вопросы