2012-08-09 62 views
2

我試圖用Doctrine2 V至爲此在Symfony2的2.1.7:學說2順序按W /功能

$query = $this->em->createQuery(
      "SELECT a 
      FROM ".$repo." a 
      WHERE a.type_id = :typeid 
       AND a.scenario = :scen 
       AND a.contact_id = :cid 
       AND a.row_type LIKE :rwtp 
      ORDER BY SUBSTRING(a.row_type, 4, 1) " 
     )->setParameters(
      array(
       'typeid' =>$sesData['type_id'], 
       'scen'  =>$sesData['scenario'], 
       'cid'  =>$sesData['contact_id'], 
       'rwtp'  =>'%.'.$whereVal.'%' 
      ) 
     ); 

$customValues = $query->getResult(); 

學說2訂單未能BY子句,因爲它不喜歡的東西除了列名和出現的排序方向。

我已經看過使用本機查詢的文檔,但這不起作用,因爲此查詢用於從多個表中提取數據(它位於我們使用的全局方法內),所以我無法做到該映射的東西,因爲超出上面的where子句,其餘列名稱是不同的表。

我認爲,爲了解決這個問題,我需要一個真正的本地查詢來自動完成映射(水合?),就像所有其他非本機的DQL查詢一樣。但那部分讓我感到困惑。

我可以嘗試使此功能起作用嗎?

回答

1

如何創建另一列,您已經存儲了SUBSTRING(a.row_type, 4, 1)的結果e。 G。在插入,映射該列和順序呢?與計算每行每個查詢的子字符串相比,這樣做效率更高。

+0

謝謝你的建議。正如你所說,這將工作得很好,效率會更高。然而,在我的具體情況中,由於原始文章中沒有提到的原因,它變得更加困難。我很希望有一種數據庫排序方法。 – Derrick 2012-08-09 15:20:12

0

效率會降低,但是您是否考慮過使用某種PHP排序函數從數據庫中獲取結果後自行排序結果的可能性?如果你的結果集不是很大,這可能是一個明智的做法。

+0

是的,我實際上做的是,在代碼目前,使其工作,但它使我肚子痛。我希望我可以在數據庫中執行ORDER BY排序(當需要時)。如果根本不可能w/Doctrine 2,我會繼續讓PHP爲我排序結果集,並希望在未來的Doctrine 2版本中添加功能。 – Derrick 2012-08-09 15:24:14

0

試試這個:

SELECT a, SUBSTRING(a.row_type, 4, 1) AS row_type 
     FROM ".$repo." a 
     WHERE a.type_id = :typeid 
      AND a.scenario = :scen 
      AND a.contact_id = :cid 
      AND a.row_type LIKE :rwtp 
     ORDER BY row_type