2012-07-19 23 views
0

我使用這個:如何使用DQL(Symfony2的)SQL數學函數

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

回答

2

Doctrine dql確實支持SQRT函數,但只能在SELECT,WHERE和HAVING子句中使用,所以它不會在您的查詢中出現在ORDER BY子句中。其他函數POW,RADIANS和COS沒有被dql顯式支持。

有一種將自己的函數添加到dql語言的方法(該文檔給出了MySQL FLOOR函數的示例 - 請參閱DQL Documentation的第13.5.5節)。但是從文檔中還不清楚它們是否也受到限制到SELECT,WHERE和HAVING子句。

在這種情況下的替代方案是使用Doctrine Native SQL

+0

我嘗試使用原生查詢和數學函數工作。但是我有一對一加入其中一個表的「專業化」。我無法理解如何在ResultSetMapping中映射它。文檔僅以一對一的方式顯示示例。 – Shwetanka 2012-07-19 19:42:41

+0

@Shewtanka我不認爲在ResultSetMapping中添加一對多應該與添加一對一更大的不同。當你嘗試這個時,你是否遇到任何特定的錯誤?如果是這樣,也許你可以添加你嘗試過的和你的問題出了什麼問題? – redbirdo 2012-07-20 08:44:39