web-dev-qa-db-fra.com

Comment obtenir un objet de résultat Doctrine2 en tant que tableau associatif?

J'ai une entité simple qui est une table qui détient mes données utilisateur et je souhaite récupérer toutes les colonnes d'un utilisateur spécifique en tant que tableau, puis json_encode, mais ce que je reçois est un objet d'entité que je devrai utiliser obtenir une méthode pour chaque valeur . Je veux juste un éventail associatif de mes valeurs de table utilisateur. Les codes que j'ai essayés et ne fonctionnaient pas (objet d'entité retourné) sont les suivants: 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: IM Utilisation du projet Z2D2, qui est une intégration doctrine2 dans Zend Cadre.

19
Mehdi Fanai

Lorsque vous faites $accounts = $qb->getQuery()->getResult(); L'argument que vous passez à GetResult indique comment hydrater le jeu de résultats qui reviendra.

Hydratation de tableau

Si vous voulez des tableaux, vous devriez passer le CONSTANT pour les hydratations de tableau Doctrine\ORM\Query::HYDRATE_ARRAY.

$ comptes = $ qb-> getquery () -> getResult (doctrine\orm\requête :: hydrate_array);

Si vous utilisez findOneBy(), il sera TOUJOURS renvoyer une entité. En raison des internes de la façon dont la recherche de travaux, vous ne pouvez pas le dire d'hydrater par aucun autre moyen d'autre que d'être des entités de retour.

Dans ce scénario, ce que vous devez faire est de créer une méthode getValues() à l'intérieur de votre entité qui renvoie une matrice de votre entité, comme ceci:

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

Hydratation API Docs: http://www.doctrine-project.org/API/orm/2.1/namespace-doctrine.orme.internal.hydratation.html

36
Layke

Vous pouvez également utiliser GetarrayResult () comme raccourci pour passer dans la constante pour obtenir un tableau de retour:

$accounts = $qb->getQuery()->getArrayResult();
23
Jeremy Hicks

Vous devez utiliser une valeur contenant constante 2 et elle est intégrée, vous pouvez le faire comme ceci à la partie de fin de votre requête.

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

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

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