Tengo DQL así:

$sql =$qb->select('login,id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login',$login);
$rs = $sql->getQuery()->getResult();

Quiero que el resultado regrese como objeto con 2 propiedades: inicio de sesión, id. ¿Hay alguna forma de que pueda hacer eso? Intenté CustomHydrator pero no funcionará. Este es mi CustomHydrator:

namespace Hydrator;

use Doctrine\ORM\Internal\Hydration\AbstractHydrator;

class CustomHydrator extends AbstractHydrator
{
   protected function hydrateAllData()
   {
    return $this->_stmt->fetchAll(\PDO::FETCH_ASSOC);
   }
}

Luego agregué $em->getConfiguration()->addCustomHydrationMode('CustomHydrator', 'Hydrator\CustomHydrator');
y ejecuta: $rs = $sql->getQuery()->getResult('CustomHydrator');

0
Hanata 24 abr. 2017 a las 12:42

2 respuestas

La mejor respuesta

Hay algunas formas de hacerlo. Si esta es una consulta que necesita reutilizar, entonces los hidratadores personalizados de Doctrine son quizás el mejor enfoque. Si no, simplemente puede lanzar el resultado a un objeto.

Si necesita un solo resultado:

$sql =$qb->select('c.login, c.id')
    ->from('Cusomter','c')
    ->where('c.login = :login')
    ->setParameter('login', $login);
$rs = (object) $sql->getQuery()->getSingleResult();

Si necesita devolver una matriz de objetos (es decir, varios elementos de resultado), entonces podría lanzar cada resultado:

$sql =$qb->select('c.login, c.id')
    ->from('Cusomter','c')
    ->where('c.login = :login')
    ->setParameter('login', $login);

$rs_new = array_map(function ($value) {
    return (object) $value;
}, $sql->getQuery()->getResult());
3
jawish 24 abr. 2017 a las 12:25
  1. Mejor manera de usar Entity como resultado http://symfony.com /doc/current/doctrine.html#creating-an-entity-class

  2. Según tengo entendido, solo necesita un resultado, así que use el siguiente código dentro del repositorio:

    $ rs = $ this-> findOneBy (['inicio de sesión' => $ inicio de sesión]);

0
Alexey Samara 24 abr. 2017 a las 10:47