J'ai ce code symfony où il récupère toutes les catégories liées à une section de blog sur mon projet:
$category = $catrep->createQueryBuilder('cc')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->getQuery();
$categories = $category->getResult();
Cela fonctionne, mais la requête inclut les doublons:
Test Content
Business
Test Content
Je souhaite utiliser la commande DISTINCT
dans ma requête. Les seuls exemples que j'ai vus m'obligent à écrire du SQL brut. Je souhaite éviter cela autant que possible, car j'essaie de garder tout mon code identique afin qu'ils utilisent tous la fonctionnalité QueryBuilder fournie par Symfony2/Doctrine.
J'ai essayé d'ajouter distinct()
à ma requête comme ceci:
$category = $catrep->createQueryBuilder('cc')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->distinct('cc.categoryid')
->getQuery();
$categories = $category->getResult();
Mais il en résulte l'erreur suivante:
Erreur fatale: appel de la méthode non définie Doctrine\ORM\QueryBuilder :: distinct ()
Comment dire à symfony de sélectionner distinct?
tu pourrais écrire
select DISTINCT f from t;
comme
select f from t group by f;
le fait est que je suis moi-même en train de me lancer dans la Doctrine, je ne peux donc pas vous donner de réponse réelle. mais vous pouvez, comme indiqué ci-dessus, simuler un distinct avec groupe par et le transformer en Doctrine . si vous souhaitez ajouter davantage de filtrage, utilisez HAVING
après group by.
Cela marche:
$category = $catrep->createQueryBuilder('cc')
->select('cc.categoryid')
->where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->distinct()
->getQuery();
$categories = $category->getResult();
Si vous utilisez l'instruction "select ()", vous pouvez procéder comme suit:
$category = $catrep->createQueryBuilder('cc')
->select('DISTINCT cc.contenttype')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->getQuery();
$categories = $category->getResult();