php - 此结果是一个仅向前的结果集,不支持在向前移动后调用 rewind() - Zend

标签 php mysql zend-framework zend-framework2

在 Zend 应用程序中,我使用 Zend\Db\TableGatewayZend\Db\Sql 从 MySQL 数据库中检索数据,如下所示。

模型 -

public function getCandidateEduQualifications($id)
{
    $id  = (int) $id;

    $rowset = $this->tableGateway->select(function (Sql\Select $select) use ($id)
    {
        $select->where
            ->AND->NEST->equalTo('candidate_id', $id)
            ->AND->equalTo('qualification_category', 'Educational');
    });

    return $rowset;
}

查看-

我只是迭代 $rowset 并在 View 中回显。但是当尝试回显两次或更多次时它会出错。单次迭代有效。

This result is a forward only result set, calling rewind() after moving forward is not supported

我可以通过将它加载到 View 中的另一个数组来解决它。但这是最好的方法吗?有没有其他方法可以解决这个问题?

$records = array();
foreach ($edu_qualifications as $result) {
    $records[] = $result;
}

编辑 -

$resultSet->buffer(); 解决了这个问题。

最佳答案

您收到此 Exception 因为这是预期的行为。 Zend 使用 PDO获取由 Zend\Db\TableGateway\TableGateway 返回的 Zend\Db\ResultSet\Resultset。 PDO 结果集默认使用只进游标,这意味着您只能循环遍历该集一次。

有关游标的更多信息,请查看 Wikipediathis文章。

由于 Zend\Db\ResultSet\Resultset 实现了 PHP Iterator您可以使用 Zend\Db\ResultSet\Resultset:toArray() 方法或使用 iterator_to_array() 函数提取集合的数组。在潜在的大型数据集上使用这个函数时一定要小心!关于游标的最好的事情之一恰恰是它们避免一次性引入所有内容,以防数据集太大,因此有时您不想一次将所有内容放入数组中。

关于php - 此结果是一个仅向前的结果集,不支持在向前移动后调用 rewind() - Zend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567219/

相关文章:

php - 尝试创建表时出现 MySQL 错误

zend-framework - fatal error :' Zend_Pdf_FileParserDatasource_File::__contruct() 的声明必须兼容

php - Propel ORM 的问题

php - URL 重写(SLUG)和 URL 重定向(htaccess)

mysql - 将xml文件中的数据插入mysql数据库

php - Doctrine中如何基于动态变量进行动态关联?

php - MVC + Service Layer 在 zend 或 PHP 中常见吗?

php - 需要有关 OAuthException 代码 2500 的帮助

php - Laravel Collection Get 方法未按预期工作

php - 带 max 和 group by 的 Laravel 查询