我遇到这个问题,获取一个本机查询来映射连接表有一些列的位置,其中列名是来自不同表的相同名称。为了理智,这几乎就是桌子的样子。
Addresses
id
latitude:float
longitude:float
street:string
Properties
id:int
latitude:float
longitude:float
address_id:int
name:string
<?php
$rsm = new ResultSetMappingBuilder($this->_em);
$rsm->addRootEntityFromClassMetadata('MatrixBundle:CombinedListing', 'cl');
$rsm->addJoinedEntityFromClassMetadata('MatrixBundle:Address', 'a', 'cl', 'addresses', array('id' => 'address_id'));
$qb = $this->_em->createNativeQuery("
SELECT cl, 3959
* acos(cos(radians($lat))
* cos(radians(cl.latitude))
* cos(radians(cl.longitude) - radians($lng))
+ sin(radians($lat)) * sin(radians(cl.latitude)))
AS distance
FROM combined_listings as cl
JOIN addresses as a on a.id = cl.address_id
WHERE a.state = :state
AND a.city = :city
ORDER BY distance $order
LIMIT $offSet, $max
", $rsm);
$qb->setParameters(["state" => $state, "city" => $city]);
return $qb->getResult();
我得到的错误是
“纬度”列与映射器中的另一列冲突。
我一直在寻找答案,解决方案或解决方法。我几乎没有在学说中使用本机查询,但DQL不支持acos()。还有其他人遇到过这个问题吗?
答案 0 :(得分:0)
我的巴迪说他看了很久以前问的一个问题。我检查了一下,意识到没有人回答。这个问题的答案是你必须使用扩展。特别是这些。 https://github.com/beberlei/DoctrineExtensions/tree/master/src/Query/Mysql