2013-04-29 98 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。

但我沒有解釋這種行爲。