0

我正在使用这个:

$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 函数?

4

1 回答 1

2

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

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

在这种情况下,另一种方法是使用Doctrine Native SQL

于 2012-07-19T18:50:44.397 回答