Doctrine Native SQL列与映射器中的另一列冲突

时间:2014-05-06 16:38:25

标签: php sql symfony doctrine-orm

我遇到这个问题,获取一个本机查询来映射连接表有一些列的位置,其中列名是来自不同表的相同名称。为了理智,这几乎就是桌子的样子。

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()。还有其他人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

我的巴迪说他看了很久以前问的一个问题。我检查了一下,意识到没有人回答。这个问题的答案是你必须使用扩展。特别是这些。 https://github.com/beberlei/DoctrineExtensions/tree/master/src/Query/Mysql