| Total Complexity | 5 | 
| Total Lines | 58 | 
| Duplicated Lines | 0 % | 
| Changes | 1 | ||
| Bugs | 0 | Features | 0 | 
| 1 | <?php  | 
            ||
| 10 | class Paginator implements Countable, IteratorAggregate  | 
            ||
| 11 | { | 
            ||
| 12 | /**  | 
            ||
| 13 | * @var QueryBuilder  | 
            ||
| 14 | */  | 
            ||
| 15 | private $query;  | 
            ||
| 16 | |||
| 17 | /**  | 
            ||
| 18 | * @var int  | 
            ||
| 19 | */  | 
            ||
| 20 | private $count;  | 
            ||
| 21 | |||
| 22 | public function __construct($query)  | 
            ||
| 25 | }  | 
            ||
| 26 | |||
| 27 | public function count()  | 
            ||
| 28 |     { | 
            ||
| 29 | $queryBuilder = $this->cloneQuery($this->query);  | 
            ||
| 30 | |||
| 31 | $result = $queryBuilder  | 
            ||
| 32 |             ->resetQueryPart('select') | 
            ||
| 33 |             ->resetQueryPart('orderBy') | 
            ||
| 34 | ->setMaxResults(null)  | 
            ||
| 35 | ->setFirstResult(null)  | 
            ||
| 36 |             ->select('COUNT(id)') | 
            ||
| 37 | ->execute()  | 
            ||
| 38 | ->fetchColumn(0)  | 
            ||
| 39 | ;  | 
            ||
| 40 | |||
| 41 | $this->count = false === $result ? 0 : $result;  | 
            ||
| 42 | |||
| 43 | return $this->count;  | 
            ||
| 44 | }  | 
            ||
| 45 | |||
| 46 | public function getIterator()  | 
            ||
| 59 | }  | 
            ||
| 60 | |||
| 61 | private function cloneQuery(QueryBuilder $query): QueryBuilder  | 
            ||
| 70 |