2013-07-26 10 views
0

我在Zend Framework 2中使用Doctrine2。在一個非常獨特的情況下,我需要創建一個本機SQL查詢,它只選擇一個表的ID並進行一些地理計算。我跟着文檔,創造了該查詢ResultSetMapping定義:重置Doctrine ResultSetMapping爲後續查詢

$rsm = new ResultSetMapping(); 
$rsm->addEntityResult('Location', 'l'); 
$rsm->addFieldResult('l', 'id', 'id'); 
$rsm->addScalarResult('distance', 'distance'); 
$query = $em->createNativeQuery('SELECT l.id, (3959 * acos(cos(radians(:lat)) 
     * cos(radians(l.latitude)) 
     * cos(radians(l.longitude) - radians(:lng)) 
     + sin(radians(:lat)) 
     * sin(radians(l.latitude)))) AS distance 
    FROM location l 
    WHERE 
    l.latitude BETWEEN (:lat - .2) AND (:lat + .2) 
    AND l.longitude BETWEEN (:lng -.2) AND (:lng + .2) 
    HAVING distance < 10 ORDER BY distance'), $rsm); 
$query->setParameter('lng', $lng) 
    ->setParameter('lat', $lat) 

這會返回一個結果正確設置和我處理它。

不過,我想等我做了一個簡單的查詢DQL ​​

$em->createQuery('SELECT l FROM Location l WHERE l.id IN (:locations)') 
    ->setParameter('locations', $locationIds) 
    ->getResult(); 

所得實體的集合只擁有水潤的「ID」字段返回這些實體的完全水化的集合。所有其他值都爲空。

我懷疑這是因爲我爲之前的查詢設置了ResultSetMapping,並且之後它也被應用於DQL中。我如何着手將Doctrine的映射行爲重置爲默認值?

編輯

這裏是位置實體的刪減版本。它在該網站的所有其他區域保溼得很好。

<?php 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="location") 
*/ 
class Location extends RestrictedSite 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer"); 
* @ORM\GeneratedValue(strategy="AUTO") 
* 
* @Annotation\Exclude() 
* 
* @var int 
*/ 
protected $id; 
/** 
* @ORM\Column(type="string", length=255, name="name") 
* 
* @var string 
*/ 
protected $name; 

/** 
* 
* @ORM\Column(type="float") 
* 
* @var float 
*/ 
protected $latitude; 

/** 
* 
* @ORM\Column(type="float") 
* 
* @var float 
*/ 
protected $longitude; 


... more columns & methods ... 
} 

的模式是這樣的:

CREATE TABLE `location` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) DEFAULT NULL, 
    `latitude` float DEFAULT NULL, 
    `longitude` float DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB 
+0

請粘貼您的位置實體以及您的映射 –

+0

我已編輯原始帖子以包含位置實體的外觀和相應表格的基本示例。 –

回答