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()

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

【讨论】:

感谢您的回复。不过这很奇怪。我在 selectWith 和 foreach 之间完全没有任何关系!这没有意义。 @riyunoa 你 100% 确定在到达 foreach 之前从未使用过 $res 吗?你能发布从select开始的完整代码吗?

以上是关于ZF2 - 迭代 HydratingResultSet的主要内容,如果未能解决你的问题,请参考以下文章

zf2,表单集合没有在zf2中创建正确的输入名称

ZF2维护页面

ZF2:我在哪里存储 partialLoop 模板文件?

ZF2 - \Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol()

ZF2 - Doctrine ORM,简单表连接

ZF2 - 使用 Ajax 填充选择