我正在使用TableGateway的selectWith函数来返回实体的HydratingResultSet。我需要遍历结果集的每个实体 - 不知道我是怎么做的,但是使用foreach会给出错误“这个结果是一个前向结果集,在向前移动后调用rewind()不是支持的”。
我试图做的基本上是:
$res = $this->tableGateway->selectWith($query);
foreach($res as $r) {...}
我做错了什么?我们正在使用Zend Framework 2.3。提前致谢!
答案 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()
$res
和foreach
???