扩展ResultSet时出错

时间:2013-04-29 08:27:33

标签: zend-framework2 resultset

在我的项目中,我需要一个ResultSet来创建我的模型,具体取决于结果数据。 所以我扩展了\ Zend \ Db \ ResultSet \ ResultSet并覆盖了current方法。

 /**
 * @return array|\ArrayObject|null
 */
public function current()
{
    $data = $this->dataSource->current();

    if ($this->returnType === self::TYPE_ARRAYOBJECT && is_array($data)) {
        /** @var $ao ArrayObject */
        $ao = $this->getModelClass($data['Type']);
        if ($ao instanceof ArrayObject || method_exists($ao, 'exchangeArray')) {
            $ao->exchangeArray($data);
        }
        return $ao;
    }

    return $data;
}

并将此类作为ResultSet添加到我的TableGateway:

return new TableGateway('Bookings', $dbAdapter, null, new \MyApp\Db\ResultSet\Entry());

如果我迭代一次结果,它的效果非常好。但是如果在结果中迭代两次或更多次,valid方法总是返回false。 我已经在ResultSet上调用了buffer方法,但它仍然不起作用。

如果我删除自己的类并使用\ Zend \ Db \ ResultSet \ ResultSet,我可以在结果中多次迭代。

任何人都可以看到错误吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。 在我的current方法的第一行中,我将当前记录作为数组。当我用parent::current调用替换此行时,buffer正常工作,我可以通过我的ResultSet多次迭代。

但我没有解释这种行为。