2013-04-01 60 views
3

在Zend Framework應用程序中,它與ZF2 Getting Started tutorial的專輯應用程序非常相似,我使用ResultSet對象通過控制器將數據從模型傳輸到視圖(有關詳細信息,請參閱下面的代碼)。Zend Db ResultSet ResultSet對象在哪裏存儲檢索到的數據?

這工作正常,但我沒有得到,其中ResultSet對象持有的數據。我可以循環它,例如與foreach並獲取數據row byrow(或模型對象更好的模型對象)。但是,當我在我的IDE中調試它,或者僅僅使用var_dump(...)時,它似乎是空的。

Zend\Db\ResultSet\ResultSet對象如何保存從數據庫中檢索的數據?

代碼的相關部分:

模塊設置:

class Module implements ConfigProviderInterface, ServiceProviderInterface, AutoloaderProviderInterface { 
... 
    public function getServiceConfig() { 
     try { 
      return array (
       'factories' =>array(
        ... 
        'SportTable' => function ($serviceManager) { 
         $tableGateway = $serviceManager->get('SportTableGateway'); 
         $table = new SportTable($tableGateway); 
         return $table; 
        }, 
        'SportTableGateway' => function ($serviceManager) { 
         $dbAdapter = $serviceManager->get('Zend\Db\Adapter\Adapter'); 
         $resultSetPrototype = new ResultSet(); 
         $resultSetPrototype->setArrayObjectPrototype(new Sport()); 
         return new TableGateway('sports', $dbAdapter, null, $resultSetPrototype); 
        }, 
        ... 
       ) 
      ); 
     } 
     ... 
} 

模型(表):

class CourseTable { 
     ... 
    public function findAllByCityNameAndSportTitle($cityName, $sportTitle) { 
     $select = new Select(); 
     $where = new Where(); 
     ... 
     $resultSet = $this->tableGateway->selectWith($select); 
     return $resultSet; 
    } 
    ... 
} 

模型(映射器):

class Course implements ArraySerializableInterface { 

    public $id; 
    ... 

    public function exchangeArray(array $data) { 
     $this->id    = (isset($data['id'])) ? $data['id'] : null; 
     ... 
    } 
    ... 
} 

控制器:

class CatalogController extends AbstractActionController { 
    ... 
    public function listCoursesAction() { 
     $cityName = $this->params()->fromRoute('city', null); 
     $sportTitle = $this->params()->fromRoute('sport', null); 
     return new ViewModel(array(
      'city' => $cityName, 
      'sport' => $sportTitle, 
      'courses' => $this->getCourseTable()->findAllByCityNameAndSportTitle($cityName, $sportTitle) 
     )); 
    } 
    ... 
} 

查看:

<?php foreach ($courses as $course) : ?> 
<div> 
    <div>id: <?php echo $this->escapeHtml($course->id); ?></div> 
    ... 
</div> 
<?php endforeach; ?> 

回答

0

Zend\Db\ResultSet\ResultSet或者說Zend\Db\ResultSet\AbstractResultSet持有的回答你的問題。這個對象有10-12個方法,其中大多數提供迭代功能。爲了回答你的問題,Zend\Db\ResultSet\ResultSet保存從Db檢索到的其參數dataSource參數(Zend \ Db \ ResultSet \ ResultSet :: $ dataSource)中的信息。

結果被迭代和加載foreach但不被var_dump()看到的悖論可以通過返回的結果實際上保存在緩衝中的事實來解釋。

如果你想訪問結果集,我建議你使用Zend\Db\ResultSet\ResultSet::toArray()$resultSet->toArray())。這將返回一個數組數組,其中每個數組都是DB表中的一行。

希望這有助於反饋將不勝感激:),

斯托揚。

+0

謝謝你的回答!但是'Zend \ Db \ ResultSet \ ResultSet#toArray()'不適用於我。我調用它('$ courses-> toArray();')並在[第一行]上設置一個斷點(https://github.com/zendframework/zf2/blob/master/library/Zend/Db/ResultSet/Zend \ Db \ ResultSet \ AbstractResultSet#toArray()'的/AbstractResultSet.php#L256)。然後我重新加載頁面,並獲得代碼 - 「$ dataSource」屬性爲空。引發了一個異常:'作爲這個DataSource的一部分,行類型的對象不能轉換爲數組'。 – automatix

+0

沒有斷點,'$ courses-> toArray();'返回了什麼? –

+3

它返回這個異常:'作爲這個DataSource的一部分,行類型的對象不能轉換爲數組' – automatix