symfony doctrine2 symfony-2.1

Symfony2 Selecciona una columna en doctrina



doctrine2 symfony-2.1 (4)

Esto funcionó para mí:

$qb = $repository->createQueryBuilder(''i'') ->select(''i.name'') ->...

Estoy tratando de refinar la consulta tratando de seleccionar menos valores posibles. Por ejemplo, tengo una entidad "Anagrafic" que contiene su nombre, dirección, ciudad, etc., y un formulario donde quiero cambiar solo uno de estos campos, como la dirección. He creado esta consulta:

//AnagraficRepository public function findAddress($Id) { $qb = $this->createQueryBuilder(''r'') ->select(''r.address'') ->where(''r.id = :id'') ->setParameter(''id'', $Id) ->getQuery(); return $qb->getResult(); }

hay algo mal con esta consulta porque no devuelvo ningún valor, pero si hago la consulta normalmente:

//Controller $entity = $em->getRepository(''MyBusinessBundle:Anagrafic'')->find($id);

Devuelve el valor correcto ¿Cómo hago una consulta seleccionando solo una columna?


Como está solicitando una sola columna de cada registro, seguramente esperará una array . Dicho esto, debe reemplazar getResult con getArrayResult() porque no puede aplicar la hidratación del objeto:

$data = $qb->getArrayResult(); Now, you have structure: $data[0][''address''] $data[1][''address''] ....

Espero que esto ayude.

En cuanto a la discusión sobre el rendimiento en los comentarios, generalmente estoy de acuerdo con usted por no querer que se obtengan las 30 columnas cada vez. Sin embargo, en ese caso, debería considerar escribir consultas con nombre para minimizar el impacto si alguna vez se altera la base de datos.


Puede usar objetos parciales para hidratar solo un campo y aún devolver un objeto.


Use objetos parciales como este para seleccionar campos

$qb = $this->createQueryBuilder(''r'') ->select(array(''partial r.{id,address}'')) ...

Pon tus nombres de campo entre los corchetes