ZF2 - 迭代HydratingResultSet

时间:2014-11-05 08:27:14

标签: php zend-framework zend-framework2

我正在使用TableGateway的selectWith函数来返回实体的HydratingResultSet。我需要遍历结果集的每个实体 - 不知道我是怎么做的,但是使用foreach会给出错误“这个结果是一个前向结果集,在向前移动后调用rewind()不是支持的”。

我试图做的基本上是:

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

我做错了什么?我们正在使用Zend Framework 2.3。提前致谢!

2 个答案:

答案 0 :(得分:1)

你必须在itarate或get-array之前缓冲()结果 - toArray()

$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 

但请注意,对于大结果,这是不可取的。

答案 1 :(得分:0)

您在到达$res循环之前使用foreach ...

HydratingResultSet是仅向前结果集(数据尚未从数据库加载),一旦你重复抛出它,就不能再做了。

要多次使用Resultset,您需要一次加载所有数据。 $res->buffer()$res = $res->toArray()

$resforeach ???

之间有什么代码?