【问题标题】:ZF2 - Iterating over a HydratingResultSetZF2 - 迭代 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。提前致谢!

【问题讨论】:

标签: php zend-framework zend-framework2


【解决方案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开始的完整代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2021-08-24
    • 2016-10-22
    相关资源
    最近更新 更多