2014-11-05 54 views
0

我使用TableGateway的selectWith函數返回實體的HydratingResultSet。我需要遍歷結果集的每個實體 - 不知道我該如何去做,但使用foreach會出現錯誤「此結果是僅前向結果集,在向前移動後調用rewind()不是支持的」。ZF2 - 在HydratingResultSet上循環訪問

我試圖做主要是:

$res = $this->tableGateway->selectWith($query); 
foreach($res as $r) {...} 

我在做什麼錯?我們使用的是Zend Framework 2.3。提前致謝!

+0

可能這是解決您的問題?檢查編輯。 http://stackoverflow.com/questions/18567219/this-result-is-a-forward-only-result-set-calling-rewind-after-moving-forward – Mernayi 2014-11-05 08:34:42

回答

1

你必須緩衝()itarate之前產生或得到一個數組 - 指定者()

$res = $this->tableGateway->selectWith($query); 

$res->buffer(); // you need to buffer result first 
//$res = $res->toArray(); // or transform resultset to array but I prefere more to buffer 

foreach($res as $r) {...} // first iterate 
foreach($res as $r) {...} // second iterate 

但要小心,這是不是在大結果爲宜。

0

到達foreach循環之前,您正在使用$res ...

HydratingResultSet是隻向前結果集(數據尚未從數據庫加載),一旦你扔迭代它,你不能再這樣做。

要多次使用Resultset,您需要一次加載所有數據。 $res->buffer()$res = $res->toArray()

你有$resforeach之間什麼代碼???

+0

感謝您的回覆。雖然這是奇怪的事情。我在selectWith和foreach之間絕對沒有任何東西!這沒有意義。 – riyunoa 2014-11-05 22:07:39

+0

@riyunoa是你100%確定'$ res'在達到'foreach'之前從未使用過嗎?你能從「select」開始發佈完整的代碼嗎? – Exlord 2014-11-06 05:14:05