我使用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()
$res
和foreach
之间有什么代码???