我怎樣才能使學說1.2類似於經典的PHP PDO如何在Doctrine 1.2中逐個獲取結果?
while ($obj = $stmt->fetch()) {...}
東西。
我已經試過
while ($obj = $query->fetchOne()) {...}
,但它始終只返回第一個對象中找到。
有什麼辦法可以實現這種行爲?
我的查詢並不重要。這是一個普通的簡單的(注意,我在*表類模型)
$query = $this->createQuery('a');
我怎樣才能使學說1.2類似於經典的PHP PDO如何在Doctrine 1.2中逐個獲取結果?
while ($obj = $stmt->fetch()) {...}
東西。
我已經試過
while ($obj = $query->fetchOne()) {...}
,但它始終只返回第一個對象中找到。
有什麼辦法可以實現這種行爲?
我的查詢並不重要。這是一個普通的簡單的(注意,我在*表類模型)
$query = $this->createQuery('a');
你試過:
while ($obj = $query->execute()) {...}
如果你想要,而不是獲取對象的數組:
while ($obj = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY)) {...}
在symfony2中處理遷移命令時,我發現$query->executes();
在返回之前將完整的結果集提取到RAM中。
這對於少量數據來說不是問題,但是如果結果更大,那麼您的進程可能會運行OutOfMemory。
爲了解決您可以通過結果「一一」這個說法迭代問題:
$query->iterate();
我的事了similare這個PDO聲明:while ($obj = $stmt->fetch()) {...}
一個更完整的例子看起來像這樣:
$em = $this->getContainer()->get('doctrine');
$iterator = $em->getRepository('AcmeBundle:Entity')
->createQueryBuilder('e')
->getQuery()->iterate();
foreach($iterator as $item){
$item = $item[0];
// Your logic here:
$item->getId();
....
}
如果你有連接,像這樣做:
$stmt = $conn->query($queryString);
while ($obj = $stmt->fetch()) {...}
隨着fetchOne()
你只會得到一個條目都沒有。
使用水合物模式Doctrine_Core::HYDRATE_ON_DEMAND
$q = Doctrine_Query::create()
->select('...')
->from('...');
// Returns instance of Doctrine_Collection_OnDemand
$result = $q->execute(array(), Doctrine_Core::HYDRATE_ON_DEMAND);
foreach ($result as $obj)
{
// do something with your object
}
我現在想,但我認爲$查詢 - >執行()返回所有集合所以沒有用的,而 – 2012-07-17 14:00:15
這沒有按我的意願工作。因爲Doctrine_Collection使用太多內存。我想作爲分類PDO來像邏輯和sql之間的緩衝區一樣工作。檢索一個對象並使用它進行處理。不管怎麼說,還是要謝謝你。 – 2012-07-17 14:08:41
您仍然可以查看[doc](http://doctrine.readthedocs.org/en/latest/en/manual/dql-doctrine-query-language.html#select-queries)。 – j0k 2012-07-17 14:09:45