在我的项目中,我需要一个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,我可以在结果中多次迭代。
任何人都可以看到错误吗?
答案 0 :(得分:0)
我找到了解决问题的方法。
在我的current
方法的第一行中,我将当前记录作为数组。当我用parent::current
调用替换此行时,buffer
正常工作,我可以通过我的ResultSet多次迭代。
但我没有解释这种行为。