无法找到Doctrine Query Builder ACOS功能

时间:2012-06-14 07:42:25

标签: symfony doctrine-orm

我想在自定义存储库类中计算距离。问题是Doctrine在处理ACOS函数时抛出异常:

[Syntax Error] line 0, col 70: Error: Expected known function, got 'ACOS'

以下是查询:

public function findLocation($latitude, $longitude)
{
    $em = $this->getEntityManager();
    return $em->createQueryBuilder()
                    ->select('((ACOS(SIN('.$latitude.' * PI() / 180) * SIN(p.latitude * PI() / 180) + COS('.$latitude.' * PI() / 180) * COS(p.latitude * PI() / 180) * COS(('.$longitude.' – p.longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance')
                    ->from('StrictPlaceBundle:Poi', 'p')
                    ->add('orderBy', 's.distance ASC')
                    ->getQuery()->getResult();    
}

有什么不对?

1 个答案:

答案 0 :(得分:12)

ACOS是not supported by DQL。您当然可以自己添加它(参见Adding your own functions to the DQL language)。

此外,您需要的三角函数的MySQL实现是DoctrineExtensions

的一部分