Newscoop\Entity\Repository\ArticleRepository::searchArticles PHP Метод

searchArticles() публичный Метод

Search fo articles by keyword and filters.
public searchArticles ( $articleSearchCriteria, boolean $onlyPublished = true, $order = 'desc' ) : Doctrine\ORM\Query
$onlyPublished boolean
Результат Doctrine\ORM\Query
    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;
    }