0

在我的项目中,我需要一个 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 上调用了bufferMethod,但它仍然不起作用。

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

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

4

1 回答 1

0

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

但我对这种行为没有任何解释。

于 2013-04-29T11:32:12.077 回答