public function __construct(ObjectManager $storage, array $query, array $options) { // not sure i like this $this->storage = $storage; $this->query = $query; $this->options = $options + array('pager-include-offset' => null, 'pager-offset' => null, 'pager-limit' => self::DEFAULT_LIMIT, 'pager-dir' => self::DEFAULT_DIRECTION); $this->options['pager-limit'] = intval($this->options['pager-limit']); if (!($this->options['pager-limit'] > 0 && $this->options['pager-limit'] < self::MAX_LIMIT)) { $this->options['pager-limit'] = self::DEFAULT_LIMIT; } if (!in_array($this->options['pager-dir'], self::$VALID_DIRECTIONS)) { $this->options['pager-dir'] = self::DEFAULT_DIRECTION; } $indexOptions = array('limit' => $this->options['pager-limit']); if (isset($this->options['sort'], $this->options['order'])) { $indexOptions += array('sort' => array($this->options['sort']), 'order' => $this->options['order']); } $this->sort = $storage->getIndexFor(array_keys($query), $indexOptions)->getSort(); $useId = false; foreach ($this->sort as $val) { if (substr($val, -3) === '_id') { $useId = true; } break; } $this->offsetKey = $useId ? 'offset-id' : 'offset'; }