codeigniter4 / codeigniter4/CodeIgniter4
`Model::paginate()` behavior when `$page` exceeds the last page
- Langage dominant
- PHP
- Étoiles
- 6k
- Forks
- 2k
- Merge moyen
- 1 j 11 h
- PR mergées (30 j)
- 73
Description
### PHP Version
8.3
### CodeIgniter4 Version
4.1.5
### CodeIgniter4 Installation Method
Manual (zip or tar.gz)
### Which operating systems have you tested for this bug?
Linux
### Which server did you use?
apache
### Database
MySQL 5.6
### What happened?
When i paginate the model like this `$UsersMode->orderBy('id_user', 'ASC')->paginate(8, 'group', $page_number);`
returns "`SELECT * FROM users ORDER BY id_user ASC LIMIT 8, 8`" based on offset and per page number
But my total count rows in the table are 24, so when i reach the end `16, 8` it returns me the same query as the last existing page in my database even with `$page_number = 100`
### Steps to Reproduce
```php
public function load_more($page_number = 2)
{
$UsersModel = new UsersModel();
$this->ViewData['Page'] = $page_number;
$this->ViewData['Users'] = $UsersMode->orderBy('id_user', 'ASC')->paginate(8, 'group', $page_number);
echo $UsersModel->db->getLastQuery();
}
```
returns "`SELECT * FROM users ORDER BY id_user ASC LIMIT 8, 8`"
But my total count rows in the table are 24, so when i reach the end `16, 8` `$page_number = 10` and go to a page number more than 3 it returns the same query "`SELECT * FROM users ORDER BY id_user ASC LIMIT 16, 8`"
### Expected Output
Going to a page number more than the total count rows of my table it should return the propper offset even if i have the total rows less than the per page number or less than the total count
`$page_number = 10` it should returns the query "`SELECT * FROM users ORDER BY id_user ASC LIMIT 80, 8`" even if i don't have enough records in my database table
### Anything else?
_No response_
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Start at the Model::paginate() entry point and reproduce the behavior with the provided load_more() example, using 24 rows and page 10. Check whether the generated query preserves the requested offset; done means page 10 produces LIMIT 80, 8 even when no records exist there.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- mysql, php
- Domaine
- backend, database
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100