2015-05-20 53 views
0

我需要在我的系統的DQL查詢中包含一個帶有LIMIT子句的子查詢。由於Doctrine不支持它,我將它改爲原生查詢。然而,本機查詢正在返回小寫字段而不是正確的大小寫。 案件是,因爲這是工作代碼,我有一些視圖取決於這個名稱,並且更改所有名稱更難。如何在正確的情況下返回字段名稱

但我在這裏發現http://bit.ly/1Ht1ojH,這方面可以在Doctrine中配置。所以,我想這個代碼:

$conn = $this->getConnection(); 
$conn->setAttribute(Doctrine_Core::ATTR_FIELD_CASE, CASE_NATURAL); 
$res = $conn->query("select MyCasedField from whatever")->fetchAll(); 

但我得到的錯誤「試圖調用方法‘的setAttribute’階級‘學說\ ORM \ EntityManager的’

我與經理企圖也同樣的結果。 。

現在,我現在我可以做一些代碼翻譯的領域,但我發現,配置解決方案,更加乾淨。

有人知道這是爲什麼symfony中沒有讓我配置的連接?

此外,如果在DQL的子查詢中有任何使用LIMIT的方法,我會發現它更好。

+0

這並不能幫助你直接,我知道,但是我上次碰到「在子查詢中沒有DQL限制」的問題時,我實際上重新建模了數據庫。對於我來說,與原生查詢的回落相比,這是兩個邪惡中較小的一個。 –

+0

其實我在使用原生查詢時沒有問題。我認爲這是一種錯覺,試圖編寫一個獨立於數據庫的應用程序。您總是更好地使用數據庫的全部功能,而不是使用可用跨數據庫的功能子集。 –

+1

哦,我不是說從「數據庫獨立」的角度來看,而是從ORM的堅持觀點來看。一旦你調用一個本地查詢,你已經引入了不能用映射數據跟蹤的數據模型的事務。如果你堅持使用這些實體,那麼就可以使用模式工具來識別更改並進行單元測試。 對我來說這不是一個「永不做」的場景,但它肯定會帶來一點維護風險,所以在走下這條路之前我總是三思而後行。 –

回答

0

DQL中沒有LIMIT關鍵字。要使用此功能,您可以在查詢對象上調用方法setMaxResults($limit)。它也可以應用於查詢生成器。

$query = $this->getEntityManager() 
     ->createQuery('SELECT p FROM Product p') 
     ->setMaxResults($limit); 
+0

我知道。我讀過我的問題的最初部分,我寫道學說不支持它。我需要的是一個子查詢的限制解決方案,而不是主查詢。 –

相關問題