public function searchArticles($articleSearchCriteria, $onlyPublished = true, $order = 'desc') { $em = $this->getEntityManager(); $getLastArticles = true; $queryBuilder = $em->getRepository('Newscoop\\Entity\\ArticleIndex')->createQueryBuilder('a')->select('DISTINCT(a.article) as number'); $orX = $queryBuilder->expr()->orx(); $keywords = array_diff(explode(' ', $articleSearchCriteria->query), array('')); foreach ($keywords as $keyword) { $orX->add($queryBuilder->expr()->like('k.keyword', $queryBuilder->expr()->literal("{$keyword}%"))); } if (count($keywords) > 0) { $queryBuilder->leftJoin('a.keyword', 'k')->andWhere($orX); $getLastArticles = false; } if ($articleSearchCriteria->publication) { $queryBuilder->andWhere('a.publication = :publication')->setParameter('publication', $articleSearchCriteria->publication); $getLastArticles = false; } if ($articleSearchCriteria->section) { $queryBuilder->andWhere('a.sectionNumber = :section')->setParameter('section', $articleSearchCriteria->section); $getLastArticles = false; } if ($articleSearchCriteria->issue) { $queryBuilder->andWhere('a.issueNumber = :issue')->setParameter('issue', $articleSearchCriteria->issue); $getLastArticles = false; } if ($articleSearchCriteria->language) { $languageId = $em->getRepository('Newscoop\\Entity\\Language')->findOneByCode($articleSearchCriteria->language); if ($languageId) { $queryBuilder->andWhere('a.language = :language')->setParameter('language', $languageId); $getLastArticles = false; } } if ($getLastArticles) { $queryBuilder = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->select('a.number as number')->orderBy('a.uploaded', 'DESC'); } $queryBuilder->setMaxResults(80); $articleNumbers = $queryBuilder->getQuery()->getResult(); $tmpNumbers = array(); foreach ($articleNumbers as $key => $value) { $tmpNumbers[] = $value['number']; } $articleNumbers = $tmpNumbers; $query = $this->getArticlesByCriteria($articleSearchCriteria, $articleNumbers, $onlyPublished, $order); return $query; }