2013-09-22 117 views
3

我正在zf2中查詢,我找回了object(Zend\Db\ResultSet\HydratingResultSet),我必須打開一個foreach,才能找到屬性。我想在默認情況下獲取對象數組。如何在zend framework 2中返回一個對象數組?

這裏是一些代碼,我有:

工廠

'address-mapper' => function ($serviceManager) { 
    $mapper = new Mapper\Address(); 
    $mapper->setDbAdapter($serviceManager->get('Zend\Db\Adapter\Adapter')); 
    $mapper->setEntityPrototype(new Entity\Address); 
    $mapper->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods); 

    return $mapper; 
} 

查詢

public function fetchById() 
{ 
    $select = $this->getSelect()->where(array('id' => $Id)); 
    return $this->select($select); 
} 

這讓我回:

object(Zend\Db\ResultSet\HydratingResultSet)[459] 
     protected 'hydrator' => 
     object(Zend\Stdlib\Hydrator\ClassMethods)[415] 
      protected 'underscoreSeparatedKeys' => boolean true 
      private 'callableMethodFilter' => 
      .... 
      .... 

任何想法,我需要什麼做?

+0

相關的http://stackoverflow.com/questions/16590174/convert-zend-db-resultset-hydratingresultset-to-array-of-objects/16692849 – lorey

回答

4

Zend\Db\ResultSet\HydratingResultSet有一個toArray方法。所以,你可以做到這一點,以獲得滿意的結果,而不是一個結果集的多維數組:

public function fetchById() 
{ 
    $select = $this->getSelect()->where(array('id' => $Id)); 
    $arrayResults = $this->select($select)->toArray() 
    return $arrayResults; 
} 
+5

我期待獲得對象的數組,而不是數組的數組,爲了一致性 – Patrioticcow

+4

'HydratingResultSet'實現'Iterator'接口,因此您已經可以使用'foreach'來循環結果,就像它是一個數組一樣。如果你真的需要一個對象數組,你將不得不使用這種'foreach'手動構造數組。 –

5

正如史蒂夫指出的那樣,你可以遍歷結果集就像一個數組。但是如果你需要它作爲一個真正的數組,ZF2提供了iteratorToArray函數,它會將它轉換爲一個數組。

public function fetchById($Id) { 
    $select = $this->getSelect()->where(array('id' => $Id)); 
    $results = $this->select($select); 

    return \Zend\Stdlib\ArrayUtils::iteratorToArray($results); 
} 
+0

虐待它試一試,謝謝 – Patrioticcow

+0

這就是我在這裏尋找的:http://stackoverflow.com/questions/16590174/convert-zend-db-resultset-hydratingresultset-to-array-of-objects/16692849如果你在那裏發佈你的答案,我會接受它!非常感謝! – lorey

+3

似乎第二個參數$ recursive應該是false。 – lorey

相關問題