select = $select; $this->countSelect = $countSelect; if ($adapterOrSqlObject instanceof Adapter) { $adapterOrSqlObject = new Sql($adapterOrSqlObject); } if (!$adapterOrSqlObject instanceof Sql) { throw new Exception\InvalidArgumentException( '$adapterOrSqlObject must be an instance of Zend\Db\Adapter\Adapter or Zend\Db\Sql\Sql' ); } $this->sql = $adapterOrSqlObject; $this->resultSetPrototype = ($resultSetPrototype) ?: new ResultSet; } /** * Returns an array of items for a page. * * @param int $offset Page offset * @param int $itemCountPerPage Number of items per page * @return array */ public function getItems($offset, $itemCountPerPage) { $select = clone $this->select; $select->offset($offset); $select->limit($itemCountPerPage); $statement = $this->sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $resultSet = clone $this->resultSetPrototype; $resultSet->initialize($result); return iterator_to_array($resultSet); } /** * Returns the total number of rows in the result set. * * @return int */ public function count() { if ($this->rowCount !== null) { return $this->rowCount; } $select = $this->getSelectCount(); $statement = $this->sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $row = $result->current(); $this->rowCount = (int) $row[self::ROW_COUNT_COLUMN_NAME]; return $this->rowCount; } /** * Returns select query for count * * @return Select */ protected function getSelectCount() { if ($this->countSelect) { return $this->countSelect; } $select = clone $this->select; $select->reset(Select::LIMIT); $select->reset(Select::OFFSET); $select->reset(Select::ORDER); $countSelect = new Select; $countSelect->columns(array(self::ROW_COUNT_COLUMN_NAME => new Expression('COUNT(1)'))); $countSelect->from(array('original_select' => $select)); return $countSelect; } }