在Zend应用程序中,我使用Zend\Db\TableGateway并Zend\Db\Sql从MySQL数据库中检索数据数据,如下所示。
Zend\Db\TableGateway
Zend\Db\Sql
型号-
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并在视图中回显。但是,当尝试回声两次或更多次时,它将产生错误。单次迭代有效。
此结果是仅向前结果集,不支持向前移动后调用rewind()
我可以通过将其加载到视图中的另一个数组来解决它。但这是最好的方法吗?还有其他方法可以解决吗?
$records = array(); foreach ($edu_qualifications as $result) { $records[] = $result; }
编辑-
$resultSet->buffer(); 解决了问题。
$resultSet->buffer();
您收到此消息,Exception因为这是预期的行为。Zend使用PDO来获取Zend\Db\ResultSet\Resultset由PDO返回的PDOZend\Db\TableGateway\TableGateway。默认情况下,PDO结果集使用只进游标,这意味着您只能在该结果集中循环一次。
Exception
Zend\Db\ResultSet\Resultset
Zend\Db\TableGateway\TableGateway
有关游标的更多信息,请维基百科和此文章。
在Zend\Db\ResultSet\Resultset实现PHP时,Iterator您可以使用Zend\Db\ResultSet\Resultset:toArray()方法或iterator_to_array()函数提取集合的数组。不过,在可能较大的数据集上使用此功能时请务必小心!关于游标的最好的事情之一就是,如果数据集太大,它们就避免一次性输入所有内容,因此有时您不想一次将它们全部放入一个数组中。
Iterator
Zend\Db\ResultSet\Resultset:toArray()
iterator_to_array()