zend framework array ¿Cómo obtener un objeto de resultado Doctrine2 como una matriz asociativa?




array asociativo php (4)

Tengo una entidad simple que es una tabla que contiene mis datos de usuario y quiero recuperar todas las columnas de un usuario específico como una matriz y luego json_encodelas pero lo que obtengo es un objeto de entidad que tendré que usar el método de obtención para cada valor . Solo quiero una matriz asociativa de mis valores de tabla de usuario. Los códigos que probé y no funcionaron (objeto de entidad devuelto) son los siguientes: 1.

$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: Estoy usando el proyecto z2d2, que es la integración de doctrine2 en el marco Zend.


Answer #1

También puedes usar getArrayResult () como un atajo para pasar la constante para recuperar una matriz:

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

Answer #2

Debe usar la constante que contiene el valor 2 y está incorporado, puede hacerlo así al final de su consulta

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

Answer #3

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

Array Hidratación

Si desea matrices, debe pasar CONSTANT para las hidrataciones de matriz Doctrine\ORM\Query::HYDRATE_ARRAY .

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

Si está utilizando findOneBy() , siempre devolverá una entidad. Debido a los aspectos internos de cómo funciona encontrar, no puede decirle que se hidrate por ningún otro medio que no sea el de devolver entidades.

En este escenario, lo que debe hacer es crear un método getValues() dentro de su entidad que devuelva una matriz de su entidad, como esto:

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

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


Answer #4
$data = $this->entity->findOneBy(array('key' => $value));

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

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