2012-06-08 27 views
1

我有一個包含版本號的表,我想將它們自然排序。
這是原始的SQL沒有問題:在Doctrine2中擴展我的ORDER BY

SELECT * FROM versions ORDER BY REPLACE(version, '.', '')+0 DESC 

但如果我寫我的查詢中Doctrine2這樣的:

$qry = $this->createQueryBuilder('v') 
    ->select('v') 
    ->orderBy("REPLACE(v.version, '.', '')+0", 'DESC'); 

我只得到

Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '[Syntax Error] line 0, col 100: Error: Expected end of string, got '('' in .......

有誰知道如何寫這個查詢爲Doctrine2?

回答

0

長時間struggeling後,我意識到我需要寫出來使用NativeQuery查詢:

$rsm = new \Doctrine\ORM\Query\ResultSetMapping(); 
// do some result mapping here .... 

$query = $this->_em->createNativeQuery("SELECT v.* FROM versions v ORDER BY REPLACE(v.version, '.', '')+0 DESC", $rsm); 

$versions = $query->getResult(); 
+0

另外,您可以添加自己的'REPLACE'串function.http://docs.doctrine-project。 org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html您也可以安裝doctrine擴展以添加一組預定義的函數,您可以在doctrine https:// github中註冊。 COM/beberlei/DoctrineExtensions – fyrye