在 Zend 应用程序中,我使用 Zend\Db\TableGateway
和 Zend\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 结果集默认使用只进游标,这意味着您只能循环遍历该集一次。
有关游标的更多信息,请查看 Wikipedia和 this文章。
由于 Zend\Db\ResultSet\Resultset
实现了 PHP Iterator
您可以使用 Zend\Db\ResultSet\Resultset:toArray()
方法或使用 iterator_to_array()
函数提取集合的数组。在潜在的大型数据集上使用这个函数时一定要小心!关于游标的最好的事情之一恰恰是它们避免一次性引入所有内容,以防数据集太大,因此有时您不想一次将所有内容放入数组中。
关于php - 此结果是一个仅向前的结果集,不支持在向前移动后调用 rewind() - Zend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567219/