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

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

public getArticlesByCriteria ( $articleSearchCriteria, $ids = [], $onlyPublished = true, $order = 'desc' )
    public function getArticlesByCriteria($articleSearchCriteria, $ids = array(), $onlyPublished = true, $order = 'desc')
    {
        $em = $this->getEntityManager();
        $queryBuilder = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->select('a, FIELD(a.number, :ids) as HIDDEN field', 'l', 'u', 'ap', 'p', 'aa', 'au', 't')->andWhere('a.number IN (:ids)')->leftJoin('a.issue', 'i')->leftJoin('a.section', 's')->leftJoin('a.packages', 'p')->leftJoin('a.language', 'l')->leftJoin('a.lockUser', 'u')->leftJoin('a.publication', 'ap')->leftJoin('a.attachments', 'aa')->leftJoin('a.authors', 'au')->leftJoin('a.topics', 't')->orderBy('field')->setParameters(array('ids' => $ids));
        if ($articleSearchCriteria->language) {
            $languageId = $em->getRepository('Newscoop\\Entity\\Language')->findOneByCode($articleSearchCriteria->language);
            if ($languageId) {
                $queryBuilder->andWhere('a.language = :language')->setParameter('language', $languageId);
            }
        }
        if ($articleSearchCriteria->article_type) {
            $queryBuilder->andWhere('a.type = :article_type')->setParameter('article_type', $articleSearchCriteria->article_type);
        }
        if ($articleSearchCriteria->publish_date) {
            $startDate = new \DateTime($articleSearchCriteria->publish_date);
            $endDate = new \DateTime($articleSearchCriteria->publish_date);
            $endDate->modify('+ 1 day');
            $queryBuilder->andWhere('a.published >= :publish_date_start')->setParameter('publish_date_start', $startDate);
            $queryBuilder->andWhere('a.published < :publish_date_end')->setParameter('publish_date_end', $endDate);
        }
        if ($articleSearchCriteria->published_after) {
            $queryBuilder->andWhere('a.published > :published_after')->setParameter('published_after', $articleSearchCriteria->published_after);
        }
        if ($articleSearchCriteria->published_before) {
            $queryBuilder->andWhere('a.published < :published_before')->setParameter('published_before', $articleSearchCriteria->published_before);
        }
        if ($articleSearchCriteria->author) {
            $queryBuilder->andWhere('au.id = :author')->setParameter('author', $articleSearchCriteria->author);
        }
        if ($articleSearchCriteria->creator) {
            $queryBuilder->andWhere('a.creator = :creator')->setParameter('creator', $articleSearchCriteria->creator);
        }
        if ($articleSearchCriteria->status) {
            $queryBuilder->andWhere('a.workflowStatus = :status')->setParameter('status', $articleSearchCriteria->status);
        }
        if ($articleSearchCriteria->topic) {
            $queryBuilder->andWhere('t.id = :topic')->setParameter('topic', $articleSearchCriteria->topic);
        }
        if ($onlyPublished) {
            $queryBuilder->andWhere('a.workflowStatus  = :workflowStatus')->setParameter('workflowStatus', Article::STATUS_PUBLISHED);
        }
        if ($order != false) {
            $queryBuilder->orderBy('a.uploaded', $order);
        }
        $countQueryBuilder = clone $queryBuilder;
        $query = $queryBuilder->getQuery();
        $query->setHint('knp_paginator.count', $countQueryBuilder->select('COUNT(a)')->orderBy('a.number')->getQuery()->getSingleScalarResult());
        return $query;
    }