4
votes

La pagination Laravel 5.7 affiche mais ne renvoie pas les données correctes lors du changement de page

Voici mon itinéraire:

http://localhost:8050/admin/users?page=2

Dans mon contrôleur, j'ai ce qui suit:

$users = User::with('roles', 'group')->paginate(1);

return view('admin.user.index')->with(['users' => $users]);

Sans la pagination, cela fonctionne bien et renvoie les 4 résultats que j'ai. avec la pagination la partie UI des choses fonctionne, il m'affiche 4 liens dans les contrôles de pagination (1 résultat par page) mais en cliquant sur le lien vers les pages 2, 3 et 4, il renvoie simplement le même premier élément à chaque fois. p >

Je peux voir qu'il passe le paramètre d'URL dans l'onglet réseau par exemple:

Route::namespace('Admin')->prefix('admin')->name('admin.')->middleware(['auth', 'auth.admin'])->group(function () {

Route::prefix('users')->group(function() {
    Route::get('/', 'UserController@index')->name('user');

Cependant, cela n'a aucun effet sur le résultat renvoyé, donc je suppose que le problème est avec ma requête Eloquent?


Après quelques recherches supplémentaires, le problème n'est pas avec la pagination, mais avec les paramètres GET.

Même lorsque je passe la clé de page directement dans l'URL comme ceci: http: // localhost: 8050 / admin / users? page = 2 mes paramètres GET sont vides, c'est pourquoi la pagination ne fonctionne pas, mais qu'est-ce qui empêche les paramètres GET de passer?

Même faire un dd ($ _ GET) montre que les paramètres GET sont vides .


0 commentaires

3 Réponses :


1
votes

Utilisez ceci:

$paginate = $request->input('page');
$itemsPerPage = 10;

if(!$paginate){
   $paginate = 1;
}   

$users = User::with('roles', 'group')->skip($paginate*$itemsPerPage)->take($itemsPerPage);

return view('admin.user.index')->with(['users' => $users]);


3 commentaires

Malheureusement, cela ne fonctionne toujours pas, il renvoie toujours le premier résultat.


J'ai mis à jour ma question, les paramètres GET ne sont pas passés, ils GET super global est vide.


Utilisez skip and take pour le décalage et la limite.



-1
votes

essayez ce code

Dans les utilisateurs de Controller (changez avec le nom de votre table)

{{ $users->links() }}

En vue

$users = DB::table('users')->paginate(1);

return view('user.index', ['users' => $users]);

p>


1 commentaires

C'est littéralement ce que j'ai sauf que vous avez supprimé Eloquent et que vous utilisez directement le générateur de requêtes.



-1
votes

Dans le fichier de vue, vous pouvez modifier ceci:

{!! $users->links() !!}


0 commentaires