Php 如何在dql(symfony2)中使用sql数学函数

Php 如何在dql(symfony2)中使用sql数学函数,php,symfony,doctrine,Php,Symfony,Doctrine,我用这个: $query = $em->createQuery('select cp from Temp\TempAppBundle\Entity\ClinicProfile cp INNER JOIN cp.users u left JOIN cp.specializations s where cp.latitude is not null and cp.city = ?1 order by (sqrt(pow((radians(cp.longitude) - radians(?2))

我用这个:

$query = $em->createQuery('select cp from Temp\TempAppBundle\Entity\ClinicProfile cp INNER JOIN cp.users u left JOIN cp.specializations s where cp.latitude is not null and cp.city = ?1 order by (sqrt(pow((radians(cp.longitude) - radians(?2))*cos(radians(cp.latitude)+radians(?3)), 2) + pow((radians(cp.latitude) - radians(?4)), 2))*6367)');
但我犯了个错误

[Syntax Error] line 0, col 172: Error: Expected end of string, got 'sqrt'

如何在dql中使用sql函数?

dql确实支持SQRT函数,但只支持SELECT、WHERE和HAVING子句,因此它在ORDER BY子句中出现的查询中不起作用。dql不明确支持其他函数POW、弧度和COS

有一种方法可以将您自己的函数添加到dql语言中(文档中给出了MySQL FLOOR函数的示例-请参阅的第13.5.5节),但是文档中不清楚这些函数是否也仅限于SELECT、WHERE和HAVING子句


本例中的另一种选择是使用。

我尝试使用本机查询和数学函数。但我在其中一个表“specialization”上有一个一对多联接。我无法理解如何在ResultsMapping中映射它。文档仅显示一对一的示例。@Shewtanka我不认为将一对多添加到结果映射中与将一对一添加到结果映射中有多大区别。尝试此操作时是否出现任何特定错误?如果是这样的话,也许你可以在你的问题上加上你尝试过的和出错的地方?