2011-08-31 3 views
18

Ho una semplice entità che è una tabella che contiene i miei dati utente e voglio recuperare tutte le colonne di un utente specifico come una matrice e poi json_encode ma quello che ottengo è un oggetto entità che dovrò usare get metodo per ogni valore Voglio solo un array associativo dei valori della mia tabella utente. I codici ho provato e non funzionava (oggetto entità restituito) sono le seguenti: 1.Come ottenere un oggetto risultato Doctrine2 come array associativo?

$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 utilizzando z2d2 progetto, che è l'integrazione in Doctrine2 Quadro Zend.

risposta

33

Quando si esegue $accounts = $qb->getQuery()->getResult(); l'argomento che si passa a getResult indica come idratare il set di risultati che verrà restituito.

Array idratazione

Se si desidera array, di quanto deve passare il CONSTANT per hydrations matrice Doctrine\ORM\Query::HYDRATE_ARRAY.

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

Se si utilizza findOneBy() allora sarà sempre tornare un'entità. A causa degli interni di come funziona la ricerca, non puoi dire di idratarti con altri mezzi se non per restituire le entità.

In questo scenario, ciò che devi fare è creare un metodo getValues() interno del soggetto che restituisce una matrice di vostra entità, in questo modo:

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

idratazione Documentazione API: http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

+3

Grazie per le costanti rapidi e precisi reply.The per le diverse modalità di idratazione sei: Query :: HYDRATE_OBJECT Query :: HYDRATE_ARRAY Query :: HYDRATE_SCALAR Query :: HYDRATE_SINGLE_SCALAR –

+0

E se voglio usare come '$ this-> doctrine-> em-> find ('Entity \ User', 5)'? – Rorschach

+0

Questo è il mio problema, http://stackoverflow.com/questions/25158549/doctrine-entity-object-to-array – Rorschach

21

È può anche usare getArrayResult() come una scorciatoia per passare nella costante per ottenere un array di nuovo:

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

Si dovrebbe noi e costante che contiene il valore 2 ed è integrato, si può fare in questo modo alla parte terminale della query

$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

Questa non è una risposta alla domanda. – Mogsdad