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

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

Get list for given criteria
public getListByCriteria ( SlideshowItemCriteria $criteria ) : Newscoop\ListResult
$criteria Newscoop\Criteria\SlideshowItemCriteria
Результат Newscoop\ListResult
    public function getListByCriteria(SlideshowItemCriteria $criteria)
    {
        $qb = $this->createQueryBuilder('i');
        $qb->select('i, ii, p')->leftJoin('i.image', 'ii')->leftJoin('i.package', 'p');
        if ($criteria->slideshow) {
            $qb->andWhere('i.package ' . $criteria->perametersOperators['slideshow'] . ' :package')->setParameter('package', $criteria->slideshow);
            unset($criteria->perametersOperators['slideshow']);
        }
        if ($criteria->type) {
            if ($criteria->type == 'image' && $criteria->perametersOperators['type'] == '=') {
                $qb->andWhere('i.videoUrl IS NULL');
            } elseif ($criteria->type == 'video' && $criteria->perametersOperators['type'] == '=') {
                $qb->andWhere('i.videoUrl IS NOT NULL');
            }
            unset($criteria->perametersOperators['type']);
        }
        foreach ($criteria->perametersOperators as $key => $operator) {
            if ($criteria->{$key} !== null) {
                $qb->andWhere('i.' . $key . ' ' . $operator . ' :' . $key)->setParameter($key, $criteria->{$key});
            }
        }
        $metadata = $this->getClassMetadata();
        foreach ($criteria->orderBy as $key => $order) {
            if (array_key_exists($key, $metadata->columnNames)) {
                $key = 'i.' . $key;
            }
            $qb->orderBy($key, $order);
        }
        $query = $qb->getQuery();
        return $query;
    }