2013-04-29 59 views
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()); 

它工作得很好,如果我遍历结果一次。但是如果通过结果迭代两次或更多次,则方法总是返回false。 我已经在ResultSet上调用buffer方法,但它仍然不起作用。

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

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

回答

0

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

但我没有解释这种行为。