Newscoop\Services\UserService::getCollection PHP Метод

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

Get collection by given criteria
public getCollection ( array $criteria, array $orderBy, integer $limit = null, integer $offset = null ) : PaginatedCollection
$criteria array
$orderBy array
$limit integer
$offset integer
Результат Newscoop\PaginatedCollection
    public function getCollection(array $criteria, array $orderBy, $limit = null, $offset = null)
    {
        $qb = $this->getRepository()->createQueryBuilder('u');
        $qb->setFirstResult($offset);
        $qb->setMaxResults($limit);
        if (!empty($criteria['q'])) {
            $q = $qb->expr()->literal('%' . $criteria['q'] . '%');
            $qb->andWhere($qb->expr()->orX($qb->expr()->like('u.username', $q), $qb->expr()->like('u.email', $q)));
        }
        if (!empty($criteria['groups'])) {
            $qb->join('u.groups', 'g', 'WITH', 'g.id = :group')->setParameter('group', $criteria['groups']);
        }
        if (isset($criteria['status'])) {
            $qb->andWhere('u.status = :status')->setParameter('status', $criteria['status']);
        }
        if (isset($criteria['attribute']) && is_array($criteria['attribute'])) {
            foreach ($criteria['attribute'] as $attribute => $value) {
                $qb->join('u.attributes', 'a', 'WITH', 'a.attribute = :attribute AND a.value = :value');
                $qb->setParameter('attribute', $attribute);
                $qb->setParameter('value', $value);
                break;
                // only 1
            }
        }
        foreach ($orderBy as $column => $dir) {
            $qb->addOrderBy("u.{$column}", $dir);
        }
        return new PaginatedCollection($qb->getQuery());
    }