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.