ZF2 - 迭代 HydratingResultSet
Posted
技术标签:
【中文标题】ZF2 - 迭代 HydratingResultSet【英文标题】:ZF2 - Iterating over a HydratingResultSet 【发布时间】:2014-11-05 08:27:13 【问题描述】:我正在使用 TableGateway 的 selectWith 函数来返回实体的 HydratingResultSet。我需要遍历结果集的每个实体 - 不知道该怎么做,但是使用 foreach 会给出错误“此结果是仅向前的结果集,向前移动后调用 rewind() 不是支持的”。
我想做的基本上是:
$res = $this->tableGateway->selectWith($query);
foreach($res as $r) ...
我做错了什么?我们正在使用 Zend Framework 2.3。提前致谢!
【问题讨论】:
这可以解决您的问题吗?检查编辑。 ***.com/questions/18567219/… 【参考方案1】:你必须在 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
但请注意,这不适用于大型结果。
【讨论】:
【参考方案2】:在到达foreach
循环之前,您正在使用$res
...
HydratingResultSet
是只转发结果集(数据还没有从数据库中加载),一旦你迭代抛出它,你就不能再这样做了。
要多次使用结果集,您需要一次加载所有数据。
$res->buffer()
或 $res = $res->toArray()
$res
和 foreach
之间有什么代码???
【讨论】:
感谢您的回复。不过这很奇怪。我在 selectWith 和 foreach 之间完全没有任何关系!这没有意义。 @riyunoa 你 100% 确定在到达foreach
之前从未使用过 $res
吗?你能发布从select
开始的完整代码吗?以上是关于ZF2 - 迭代 HydratingResultSet的主要内容,如果未能解决你的问题,请参考以下文章