2011-08-31 55 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

相关问题