diff --git a/system/BaseModel.php b/system/BaseModel.php index 39bd9ce2cb4c..c437a095407e 100644 --- a/system/BaseModel.php +++ b/system/BaseModel.php @@ -1073,7 +1073,8 @@ public function errors(bool $forceDB = false) */ public function paginate(?int $perPage = null, string $group = 'default', ?int $page = null, int $segment = 0) { - $pager = Services::pager(null, null, false); + // Since multiple models may use the Pager, the Pager must be shared. + $pager = Services::pager(); if ($segment) { $pager->setSegment($segment, $group); diff --git a/tests/system/Models/PaginateModelTest.php b/tests/system/Models/PaginateModelTest.php index ae93f2f6c62b..a2361b350246 100644 --- a/tests/system/Models/PaginateModelTest.php +++ b/tests/system/Models/PaginateModelTest.php @@ -79,4 +79,30 @@ public function testPaginatePageOutOfRange(): void $this->model->paginate(1, 'default', 500); $this->assertSame($this->model->pager->getPageCount(), $this->model->pager->getCurrentPage()); } + + public function testMultiplePager(): void + { + $_GET = []; + + $validModel = $this->createModel(ValidModel::class); + $userModel = $this->createModel(UserModel::class); + + $validModel->paginate(1, 'valid'); + $userModel->paginate(1, 'user'); + $pager = $this->model->pager; + + $this->assertSame($userModel->pager, $validModel->pager); + + $this->assertSame(4, $validModel->countAllResults()); + $this->assertSame(4, $userModel->countAllResults()); + + $this->assertStringContainsString('?page_valid=1"', $pager->links('valid')); + $this->assertStringContainsString('?page_valid=2"', $pager->links('valid')); + $this->assertStringContainsString('?page_valid=3"', $pager->links('valid')); + $this->assertStringContainsString('?page_valid=4"', $pager->links('valid')); + $this->assertStringContainsString('?page_user=1"', $pager->links('user')); + $this->assertStringContainsString('?page_user=2"', $pager->links('user')); + $this->assertStringContainsString('?page_user=3"', $pager->links('user')); + $this->assertStringContainsString('?page_user=4"', $pager->links('user')); + } }