Skip to content

Commit 4d20587

Browse files
committed
fix: multiple pagers with models do not work
1 parent b306fbc commit 4d20587

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,26 @@ 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+
$validModel = $this->createModel(ValidModel::class);
86+
$userModel = $this->createModel(UserModel::class);
87+
88+
$validModel->paginate(1, 'valid');
89+
$userModel->paginate(1, 'user');
90+
$pager = $this->model->pager;
91+
92+
$this->assertSame(4, $validModel->countAllResults());
93+
$this->assertSame(4, $userModel->countAllResults());
94+
95+
$this->assertStringContainsString('?page_valid=1"', $pager->links('valid'));
96+
$this->assertStringContainsString('?page_valid=2"', $pager->links('valid'));
97+
$this->assertStringContainsString('?page_valid=3"', $pager->links('valid'));
98+
$this->assertStringContainsString('?page_valid=4"', $pager->links('valid'));
99+
$this->assertStringContainsString('?page_user=1"', $pager->links('user'));
100+
$this->assertStringContainsString('?page_user=2"', $pager->links('user'));
101+
$this->assertStringContainsString('?page_user=3"', $pager->links('user'));
102+
$this->assertStringContainsString('?page_user=4"', $pager->links('user'));
103+
}
82104
}

0 commit comments

Comments
 (0)