Newscoop\Package\PackageRepository::getListByCriteria PHP Метод

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

Get list for given criteria
public getListByCriteria ( SlideshowCriteria $criteria ) : Newscoop\ListResult
$criteria Newscoop\Criteria\SlideshowCriteria
Результат Newscoop\ListResult
    public function getListByCriteria(SlideshowCriteria $criteria)
    {
        $qb = $this->createQueryBuilder('p');
        $qb->select('p, i, ii')->leftJoin('p.items', 'i')->leftJoin('i.image', 'ii');
        $fetchResult = false;
        $qbArticles = $this->_em->getRepository('Newscoop\\Package\\ArticlePackage')->createQueryBuilder('ap')->select('ap', 'a')->leftJoin('ap.article', 'a');
        if ($criteria->publication) {
            $qbArticles->where('a.publication = :publication')->setParameter('publication', $criteria->publication);
            $fetchResult = true;
        }
        if ($criteria->articleNumber && $criteria->articleLanguage) {
            $qbArticles->where('ap.article = :article')->andWhere('a.language = :language')->setParameters(array('article' => $criteria->articleNumber, 'language' => $criteria->articleLanguage));
            $fetchResult = true;
        }
        if ($fetchResult) {
            $articlePackages = $qbArticles->getQuery()->getArrayResult();
            $packagesIds = array();
            foreach ($articlePackages as $package) {
                $packagesIds[] = $package['package_id'];
            }
            $qb->andWhere('p.id IN (:packagesIds)')->setParameter('packagesIds', $packagesIds);
        }
        foreach ($criteria->perametersOperators as $key => $operator) {
            if ($criteria->{$key} !== null) {
                $qb->andWhere('p.' . $key . ' ' . $operator . ' :' . $key)->setParameter($key, $criteria->{$key});
            }
        }
        $metadata = $this->getClassMetadata();
        foreach ($criteria->orderBy as $key => $order) {
            if (array_key_exists($key, $metadata->columnNames)) {
                $key = 'p.' . $key;
            }
            $qb->orderBy($key, $order);
        }
        $query = $qb->getQuery();
        return $query;
    }