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
請粘貼您的位置實體以及您的映射 –
我已編輯原始帖子以包含位置實體的外觀和相應表格的基本示例。 –