tutorial symfony2 español entidad ejemplos datos crear consultas php doctrine2 symfony query-builder

php - español - ¿Cómo seleccionar una consulta distinta utilizando el generador de consultas symfony2 doctrine?



symfony 3 doctrine (3)

Esto funciona:

$category = $catrep->createQueryBuilder(''cc'') ->select(''cc.categoryid'') ->where(''cc.contenttype = :type'') ->setParameter(''type'', ''blogarticle'') ->distinct() ->getQuery(); $categories = $category->getResult();

Tengo este código de Symfony donde recupera todas las categorías relacionadas con una sección de blog en mi proyecto:

$category = $catrep->createQueryBuilder(''cc'') ->Where(''cc.contenttype = :type'') ->setParameter(''type'', ''blogarticle'') ->getQuery(); $categories = $category->getResult();

Esto funciona, pero la consulta incluye duplicados:

Test Content Business Test Content

Quiero usar el comando DISTINCT en mi consulta. Los únicos ejemplos que he visto requieren que escriba SQL sin procesar. Quiero evitar esto tanto como sea posible, ya que estoy tratando de mantener todo mi código de la misma manera, así que todos usan la función QueryBuilder proporcionada por Symfony2 / Doctrine.

Traté de agregar distinct() a mi consulta de esta manera:

$category = $catrep->createQueryBuilder(''cc'') ->Where(''cc.contenttype = :type'') ->setParameter(''type'', ''blogarticle'') ->distinct(''cc.categoryid'') ->getQuery(); $categories = $category->getResult();

Pero da como resultado el siguiente error:

Error fatal: llamada al método no definido Doctrine / ORM / QueryBuilder :: distinct ()

¿Cómo le digo a Symfony que seleccione distinct?


Si usa la instrucción "select ()", puede hacer esto:

$category = $catrep->createQueryBuilder(''cc'') ->select(''DISTINCT cc.contenttype'') ->Where(''cc.contenttype = :type'') ->setParameter(''type'', ''blogarticle'') ->getQuery(); $categories = $category->getResult();


podrías escribir

select DISTINCT f from t;

como

select f from t group by f;

Lo que sucede es que, en este momento, estoy metiéndome en Doctrine, así que no puedo darte una respuesta real. pero podrías, como se muestra arriba, simular un grupo distinto con un grupo y transformarlo en Doctrine . si quieres agregar más filtros, utiliza HAVING después de agrupar.