7

カスタムリポジトリクラスで距離を計算したい。問題は、ACOS関数の処理中にDoctrineが例外をスローすることです。

[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();    
}

何が間違っている可能性がありますか?

4

1 に答える 1

13

ACOSはDQLではサポートされていません。もちろん、自分で追加することもできます(DQL言語への独自の関数の追加を参照)。

また、必要な三角関数のMySQL実装は、DoctrineExtensionsの一部です。

于 2012-06-14T08:08:10.357 に答える