public function getArticles($publication, $type = null, $language = null, $issue = null) { $em = $this->getEntityManager(); $queryBuilder = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->where('a.workflowStatus = :workflowStatus')->andWhere('a.publication = :publication')->setParameters(array('workflowStatus' => 'Y', 'publication' => $publication)); $countQueryBuilder = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->select('count(a)')->where('a.workflowStatus = :workflowStatus')->andWhere('a.publication = :publication')->setParameters(array('workflowStatus' => 'Y', 'publication' => $publication)); if ($type) { $countQueryBuilder->andWhere('a.type = :type')->setParameter('type', $type); $queryBuilder->andWhere('a.type = :type')->setParameter('type', $type); } if ($issue) { $countQueryBuilder->andWhere('a.issueId = :issue')->setParameter('issue', $issue); $queryBuilder->andWhere('a.issueId = :issue')->setParameter('issue', $issue); } if ($language) { $languageId = $em->getRepository('Newscoop\\Entity\\Language')->findOneByCode($language); if (!$languageId) { throw new NotFoundHttpException('Results with language "' . $language . '" was not found.'); } $countQueryBuilder->andWhere('a.language = :languageId')->setParameter('languageId', $languageId->getId()); $queryBuilder->andWhere('a.language = :languageId')->setParameter('languageId', $languageId->getId()); } $articlesCount = $countQueryBuilder->getQuery()->getSingleScalarResult(); $query = $queryBuilder->getQuery(); $query->setHint('knp_paginator.count', $articlesCount); return $query; }