ZF2-在水合结果集上迭代


ZF2 - Iterating over a HydratingResultSet

我使用TableGateway的selectWith函数返回实体的HydratingResultSet。我需要遍历结果集的每个实体-不确定我该怎么做,但使用foreach会出现错误"This result is a forward only result set,calling reward()after moveing forward is not supported"。

我想做的基本上是:

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

我做错了什么?我们使用的是Zend Framework 2.3。提前感谢!

您必须在itarate之前缓冲()结果,或者获得一个数组-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 

但要小心,这对大的结果来说是不可取的。

在到达foreach循环之前,您正在使用$res。。。

HydratingResultSet是仅向前的结果集(数据尚未从数据库加载),一旦迭代抛出,就不能再执行了。

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

$resforeach之间有什么代码???