Skip to content

Commit cd15263

Browse files
authored
Merge pull request #6211 from kenjis/fix-model-multiple-pagers
fix: multiple pagers with models do not work
2 parents 11e1faa + 3476eb6 commit cd15263

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

system/BaseModel.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,8 @@ public function errors(bool $forceDB = false)
10731073
*/
10741074
public function paginate(?int $perPage = null, string $group = 'default', ?int $page = null, int $segment = 0)
10751075
{
1076-
$pager = Services::pager(null, null, false);
1076+
// Since multiple models may use the Pager, the Pager must be shared.
1077+
$pager = Services::pager();
10771078

10781079
if ($segment) {
10791080
$pager->setSegment($segment, $group);

tests/system/Models/PaginateModelTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,30 @@ public function testPaginatePageOutOfRange(): void
7979
$this->model->paginate(1, 'default', 500);
8080
$this->assertSame($this->model->pager->getPageCount(), $this->model->pager->getCurrentPage());
8181
}
82+
83+
public function testMultiplePager(): void
84+
{
85+
$_GET = [];
86+
87+
$validModel = $this->createModel(ValidModel::class);
88+
$userModel = $this->createModel(UserModel::class);
89+
90+
$validModel->paginate(1, 'valid');
91+
$userModel->paginate(1, 'user');
92+
$pager = $this->model->pager;
93+
94+
$this->assertSame($userModel->pager, $validModel->pager);
95+
96+
$this->assertSame(4, $validModel->countAllResults());
97+
$this->assertSame(4, $userModel->countAllResults());
98+
99+
$this->assertStringContainsString('?page_valid=1"', $pager->links('valid'));
100+
$this->assertStringContainsString('?page_valid=2"', $pager->links('valid'));
101+
$this->assertStringContainsString('?page_valid=3"', $pager->links('valid'));
102+
$this->assertStringContainsString('?page_valid=4"', $pager->links('valid'));
103+
$this->assertStringContainsString('?page_user=1"', $pager->links('user'));
104+
$this->assertStringContainsString('?page_user=2"', $pager->links('user'));
105+
$this->assertStringContainsString('?page_user=3"', $pager->links('user'));
106+
$this->assertStringContainsString('?page_user=4"', $pager->links('user'));
107+
}
82108
}

0 commit comments

Comments
 (0)