public function getArticlesForTopic($publication, $topicId, $language = false, $getResultAndCount = false, $order = null) { $em = $this->getEntityManager(); $queryBuilder = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->select('a', 'att')->where('att.id = :topicId')->join('a.topics', 'att')->setParameter('topicId', $topicId); if ($order !== null) { $queryBuilder->orderBy('a.published', $order); } $countQueryBuilder = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->select('count(a)')->where('att.id = :topicId')->join('a.topics', 'att')->setParameter('topicId', $topicId); if ($language) { $queryBuilder->andWhere('att.language = :language')->setParameter('language', $language); $countQueryBuilder->andWhere('att.language = :language')->setParameter('language', $language); } $articlesCount = $countQueryBuilder->getQuery()->getSingleScalarResult(); $query = $queryBuilder->getQuery(); $query->setHint('knp_paginator.count', $articlesCount); if ($getResultAndCount) { return array('result' => $query->getResult(), 'count' => $articlesCount); } return $query; }