diff --git a/src/Database/Table/Selection.php b/src/Database/Table/Selection.php index 2b7801f92..0e65e09aa 100644 --- a/src/Database/Table/Selection.php +++ b/src/Database/Table/Selection.php @@ -410,7 +410,7 @@ public function limit(int $limit, int $offset = null) public function page(int $page, int $itemsPerPage, &$numOfPages = null) { if (func_num_args() > 2) { - $numOfPages = (int) ceil($this->count('*') / $itemsPerPage); + $numOfPages = (int) ceil($this->count() / $itemsPerPage); } if ($page < 1) { $itemsPerPage = 0; diff --git a/tests/Database/Table/Selection.page().phpt b/tests/Database/Table/Selection.page().phpt index dfebbf6b6..2034c7299 100644 --- a/tests/Database/Table/Selection.page().phpt +++ b/tests/Database/Table/Selection.page().phpt @@ -59,3 +59,17 @@ test(function () use ($context) { //less items than $itemsPerPage $tags = $context->table('tag')->page(1, 100); Assert::equal(4, count($tags)); //all four items from db }); + +// SQL Server throw PDOException 'The number of rows provided for a FETCH clause must be greater then zero.' +if ($driverName !== 'sqlsrv') { + Assert::error(function () use ($context) { //invalid params + $tags = $context->table('tag')->page('foo', 'bar'); + Assert::equal(0, count($tags)); //no items + }, PHP_VERSION_ID >= 70100 ? [[E_WARNING, 'A non-numeric value encountered']] : []); +} + +test(function () use ($context) { // GROUP BY + $books = $context->table('book')->group('author_id')->page(2, 1, $numOfPages); + Assert::equal(1, count($books)); + Assert::equal(2, $numOfPages); +});