2015-04-05 46 views
0

我剛剛意識到,在symfony中,如果您沒有提到特定字段,則doctrine會返回大量垃圾數據,例如調試時間等。我們如何只用字段結果查詢所有的數據庫字段?例如:SELECT * FROM user WHERE username ='abc',那麼它將只返回用戶表中不包括那些垃圾數據的所有字段。Symfony2:如何使用doctrine選擇數據庫中的所有字段,而無需垃圾數據

$q = $this 
    ->createQueryBuilder('u') 
    ->where('u.username = :username') 
    ->setParameter('username', $username) 
    ->getQuery(); 

try { 
    // The Query::getSingleResult() method throws an exception 
    // if there is no record matching the criteria. 
    $user = $q->getSingleResult(); 
    var_dump($user); 
} catch (NoResultException $e) { 
    $user = false; 
} 

上面的代碼的結果:

enter image description here

我並不需要所有這些數據,我只需要在數據的字段。非常感激你的幫助。謝謝。

回答

1

這不是垃圾。這可能是整個教義,因爲你的對象有其參考。你想擺脫教義嗎?學說有許多你通常不會考慮的內部機制,因爲......好吧......它是ORM,而不僅僅是查詢和平面對象。

只有你從數據庫中得到的是你想要的數據,而教條不會執行無用的查詢。

我想你只是不完全理解教義是如何工作的。你其實是想要整個對象。這是學說的一個要點 - 將數據庫映射到對象。這就是「ORM」的意思。這是主要功能,而不是缺陷。


然而,有時你確實想要的只是普通的數據而沒有所有的學說。你可以得到那個。只需將水合改爲數組(查看學說文檔,瞭解更多關於水合作用的細節)。使用

$q->getSingleResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); 

如果您只選擇一些字段而不是整個對象,那麼默認情況下也會發生這種情況。

+0

謝謝你,這是我想要的。抱歉在問題中不清楚,我在這裏提到的垃圾是我不想要的數據。 – overshadow 2015-04-06 00:01:52

2

您正在使用var_dump。這就是註釋數據的內容。那裏沒有任何外在的東西,但是你正在傾倒一個巨大的物體樹。通常它會掛起,所以你很幸運,你甚至有什麼東西。

對於剛剛起步的原始數據使用此相反:

Doctrine\Common\Util\Debug::dump($user); 
+0

你是對的,它掛起。儘管我停下了一半。但是這不是說變量$ user包含那麼多的數據嗎?我懷疑它會消耗更多的內存空間,如果我只能得到表中的這些字段。因爲當我嘗試在select語句中指定字段時,我不會收到這些垃圾數據。 – overshadow 2015-04-05 23:22:00

+1

你試過我的回答嗎? – gview 2015-04-05 23:25:40

+0

是的,我試過了。我想你不明白我想要什麼。我不只是想查看結果,我想擺脫查詢返回的垃圾數據,因爲我懷疑它會影響性能。感謝您的回覆和幫助。 – overshadow 2015-04-05 23:34:18

相關問題