一尘不染

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

mysql

在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并在视图中回显。但是,当尝试回声两次或更多次时,它将产生错误。单次迭代有效。

此结果是仅向前结果集,不支持向前移动后调用rewind()

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

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

编辑-

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


阅读 195

收藏
2020-05-17

共1个答案

一尘不染

您收到此消息,Exception因为这是预期的行为。Zend使用PDO来获取Zend\Db\ResultSet\ResultsetPDO返回的PDOZend\Db\TableGateway\TableGateway。默认情况下,PDO结果集使用只进游标,这意味着您只能在该结果集中循环一次。

有关游标的更多信息,请维基百科文章。

Zend\Db\ResultSet\Resultset实现PHP时,Iterator您可以使用Zend\Db\ResultSet\Resultset:toArray()方法或iterator_to_array()函数提取集合的数组。不过,在可能较大的数据集上使用此功能时请务必小心!关于游标的最好的事情之一就是,如果数据集太大,它们就避免一次性输入所有内容,因此有时您不想一次将它们全部放入一个数组中。

2020-05-17