2011-08-31 58 views
18

我有一個簡單的實體,它是一張表,裏面保存着我的用戶數據 ,我想將一個特定用戶的所有列作爲數組獲取,然後json_encode它們,但是我得到的是一個實體對象,我將不得不使用get方法爲每個價值。我只想要一個我的用戶表值的關聯數組。是 我嘗試和沒有工作(返回實體對象)的代碼如下: 1.如何獲得Doctrine2結果對象作爲關聯數組?

$qb = $this->em->createQueryBuilder(); 
$qb->add('select', 'a') 
->add('from', 'Entities\Adminprofile a') 
->add('where', 'a.userid = 3333'); 
$accounts = $qb->getQuery()->getResult(); 

2.

$account = $this->em->getRepository('Entities\Adminprofile')->findOneBy(
array('userid' => '3333')); 

PS:使用z2d2項目,該項目是doctrine2集成到IM Zend框架。

回答

33

當你做$accounts = $qb->getQuery()->getResult();你傳遞給getResult的參數告訴它如何水化將返回的結果集。

陣列水化

如果你想數組,比你應該通過CONSTANT數組水化作用Doctrine\ORM\Query::HYDRATE_ARRAY

$ accounts = $ qb-> getQuery() - > getResult(Doctrine \ ORM \ Query :: HYDRATE_ARRAY);

如果您正在使用findOneBy()那麼它將永遠返回的實體。由於尋找作品的內在原因,你不能通過除了返回實體之外的任何其他方式來保護它。

在這種情況下,你需要做的是創造你的實體內部的getValues()方法,它返回的實體數組,像這樣:

public function getSimpleValues(){ 
    return array(
     'id'  => $this->getId(), 
     'lft'  => $this->getLft(), 
     'rgt'  => $this->getRgt(), 
     'name' => $this->getName(), 
     'md5Name' => $this->getMd5Name(),    
     'owner' => $this->getOwner()->getId(), 
     'etag' => $this->getEtag() 
    ); 
} 

水化API文檔:http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

+3

感謝爲不同的水化模式快速和精確的reply.The常數端部像這樣做是: Query :: HYDRATE_OBJECT Query :: HYDRATE_ARRAY Query :: HYDRATE_SCALAR Query :: HYDRATE_SINGLE_SCALAR –

+0

如果我想像'$ this-> doctrine-> em-> find('Entity \ User',5)''那樣使用什麼? – Rorschach

+0

這是我的問題,http://stackoverflow.com/questions/25158549/doctrine-entity-object-to-array – Rorschach

21

你也可以使用getArrayResult()的快捷方式通過在不斷獲取數組回:

$accounts = $qb->getQuery()->getArrayResult(); 
6

你應該我們含價值2e的常數,它是內置的,你可以在你的查詢

$qb->getQuery()->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY); 
1
$data = $this->entity->findOneBy(array('key' => $value)); 

$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($this->_em, $entity_name); 

$array = $hydrator->extract($data); 
+0

這不是問題的答案。 – Mogsdad

相關問題