2011-04-05 31 views
2

什麼是使用Doctrine findBy方法的最簡潔的方式,但得到一個數組返回而不是對象。學說findBy *方法和讀取數組

Doctrine::getTable('Table')->findOneById(x); 

這有效,但返回一個原則對象。

我還是希望能夠使用find方法,但我知道我不能在末尾添加

->fetchArray() 

其他人有這個問題嗎?

回答

3

嘗試使用toArray

Doctrine::getTable('Table')->findOneById(x)->toArray(); 
+11

如果你這樣做,你會先取一個對象,然後將其轉換爲數組,這在內存方面效率不高。 – DuoSRX 2011-04-05 14:00:40

18

可以使用魔法發現者時指定的水化模式,就像這樣:

Doctrine_Core::getTable('Table')->findOneById($x, Doctrine_Core::HYDRATE_ARRAY); 
3

哈伊姆Evgi和DuoSRX的答案是正確的,但有一個稍微不同的版本我更喜歡使用Symfony時:

假設您的型號名稱是Person,您可以使用:

PersonTable::getInstance()->findOneById(x)->toArray();

PersonTable::getInstance()->findOneById($x, Doctrine_Core::HYDRATE_ARRAY);

+0

那有什麼區別? – NBPalomino 2014-12-05 17:27:25

+0

@ NBPalomino:第一個檢索完整的對象並將其轉換爲數組,第二個直接以數組的形式檢索它(它使用較少的內存並且速度更快)。我建議您在需要檢索信息而不更新數據庫時使用Array Hydration。 – Fx32 2016-02-12 12:39:31

1
$adCampaign = $em->createQuery('select c from \Model\Campaign c where c.client = ?1') 
->setParameter(1, $clientId) 
->getArrayResult(); 

其中EM是EntityManager的 - 你得到的結果作爲數組getArrayResult

+0

我想你會發現你的答案與支持命名空間和實體管理器服務的Symfony 2.x(Doctrine 2)相關,而原始問題被標記爲Symfony 1 – nealio82 2012-10-12 08:38:29