2011-08-31 6 views
18

Tengo una entidad simple que contiene mis datos de usuario y quiero buscar todas las columnas de un usuario específico como una matriz y luego json_encode, pero lo que obtengo es un objeto de entidad que tendré que usar para obtener el método por cada valor Solo quiero una matriz asociativa de mis valores de tabla de usuario. Los códigos que probé y no funcionaba (objeto de entidad regresado) son los siguientes: 1.¿Cómo obtener un objeto de resultado de Doctrine2 como una matriz asociativa?

$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: im usando z2d2 proyecto, que es la integración en Doctrine2 Zend framework.

Respuesta

33

Cuando hace $accounts = $qb->getQuery()->getResult(); el argumento que pasa a getResult le dice cómo hidratar el conjunto de resultados que se devolverá.

matriz de hidratación

Si quieren matrices, lo que debe pasar el CONSTANT para hidrataciones matriz Doctrine\ORM\Query::HYDRATE_ARRAY.

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

Si está utilizando findOneBy() entonces será siempre devolver una entidad. Debido a los aspectos internos de cómo funciona el hallazgo, no se puede decir que se hidrate por otros medios que no sean devolver entidades.

En este escenario, lo que hay que hacer es crear un método getValues() interior de la entidad que devuelve una matriz de la entidad, así:

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() 
    ); 
} 

Hidratación de API Docs: http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

+3

Gracias por constantes reply.The rápidos y precisos para los diferentes modos de hidratación son: consultas :: HYDRATE_OBJECT consulta :: HYDRATE_ARRAY consulta :: HYDRATE_SCALAR consulta :: HYDRATE_SINGLE_SCALAR –

+0

¿y si quiero usar como '$ this-> doctrine-> em-> find ('Entidad \ usuario', 5)'? – Rorschach

+0

Este es mi problema, http://stackoverflow.com/questions/25158549/doctrine-entity-object-to-array – Rorschach

21

Usted también se puede utilizar getArrayResult() como un atajo para pasar en la constante para conseguir una gran variedad de vuelta:

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

las que debe e constante que contiene el valor 2 y está incorporado, puede hacerlo de esta manera en la parte final de su consulta

$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

Esta no es una respuesta a la pregunta. – Mogsdad

Cuestiones relacionadas