diff --git a/composer.json b/composer.json index 76865db..e99d216 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,8 @@ "zendframework/zend-modulemanager": "~2.1", "zendframework/zend-mvc": "~2.1", "zendframework/zend-servicemanager": "~2.1", - "zendframework/zend-stdlib": "~2.1" + "zendframework/zend-stdlib": "~2.1", + "zendframework/zend-paginator": "~2.1" }, "autoload": { "psr-0": { diff --git a/src/ZfcBase/Mapper/AbstractDbMapper.php b/src/ZfcBase/Mapper/AbstractDbMapper.php index 2c8b36c..3e8d1a6 100644 --- a/src/ZfcBase/Mapper/AbstractDbMapper.php +++ b/src/ZfcBase/Mapper/AbstractDbMapper.php @@ -8,6 +8,7 @@ use Zend\Db\Sql\Select; use Zend\Db\Sql\Sql; use Zend\Db\Sql\TableIdentifier; +use Zend\Paginator\Adapter\DbSelect; use Zend\Stdlib\Hydrator\HydratorInterface; use Zend\Stdlib\Hydrator\ClassMethods; use ZfcBase\EventManager\EventProvider; @@ -108,12 +109,9 @@ protected function getSelect($table = null) */ protected function select(Select $select, $entityPrototype = null, HydratorInterface $hydrator = null) { - $this->initialize(); - $stmt = $this->getSlaveSql()->prepareStatementForSqlObject($select); - $resultSet = new HydratingResultSet($hydrator ?: $this->getHydrator(), - $entityPrototype ?: $this->getEntityPrototype()); + $resultSet = $this->getResultSetPrototype($entityPrototype, $hydrator); $resultSet->initialize($stmt->execute()); return $resultSet; @@ -336,4 +334,31 @@ protected function entityToArray($entity, HydratorInterface $hydrator = null) } throw new Exception\InvalidArgumentException('Entity passed to db mapper should be an array or object.'); } + + /** + * @param object|null $entityPrototype + * @param HydratorInterface|null $hydrator + * @return HydratingResultSet + */ + public function getResultSetPrototype($entityPrototype = null, HydratorInterface $hydrator = null) + { + $this->initialize(); + + $resultSet = new HydratingResultSet($hydrator ?: $this->getHydrator(), + $entityPrototype ?: $this->getEntityPrototype()); + + return $resultSet; + } + + /** + * @param \Zend\Db\Sql\Select $select + * @return \Zend\Paginator\Adapter\DbSelect + */ + protected function getPaginatorAdapter(Select $select) + { + $adapter = $this->getDbAdapter(); + $resultSet = $this->getResultSetPrototype(); + + return new DbSelect($select, $adapter, $resultSet); + } }