codeigniter4 / codeigniter4/CodeIgniter4

`Model::paginate()` behavior when `$page` exceeds the last page

Ouverte
#8,904 24 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.