Enlaces de paginación de Laravel que no incluyen otros parámetros GET


102

Estoy usando Eloquent junto con la clase de paginación de Laravel 4.

Problema: cuando hay algunos parámetros GET en la URL, por ejemplo:, http://site.com/users?gender=female&body=hotlos enlaces de paginación producidos solo contienen el pageparámetro y nada más.

Plantilla de hoja

{{ $users->link() }}

Hay una ->append()función para esto, pero cuando no sabemos cuántos de los parámetros GET hay, ¿cómo podemos usar append()para incluir los otros parámetros GET en los enlaces paginados sin que una gran cantidad de ifcódigo estropee nuestra plantilla blade?

Respuestas:


121

EDITAR: Se requiere el comentario de Connor con la respuesta de Mehdi para que esto funcione. Gracias a ambos por sus aclaraciones.

->appends()puede aceptar una matriz como parámetro, podría pasar Input::except('page'), eso debería funcionar.

Ejemplo:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);

37
Solo para tener en cuenta para otros Googlers que vienen de esta manera, ahora es plural appends, no append . El encadenamiento correcto sería algo así como$query->appends($foo)->links();
Connor Peet

6
Descubrí que $query->appends(Input::except('page'))->links();funcionaba mejor. De lo contrario, la variable de página no se actualizó al hacer clic en una página. Laravel 4.1.24.
bitlather

... y luego me desplacé hacia abajo para ver la solución de Mehdi.
bitlather

2
LARAVEL 5: {!! $myItems->appends(Input::except('page'))->render() !!}
ecairol

2
En laravel 5.2, debe usar Solicitud en lugar de Entrada
Christophvh

104

Creo que deberías usar este código en Laravel 5. Además, esto funcionará no solo con el parámetro pagesino también con cualquier otro parámetro (s):

$users->appends(request()->input())->links();

Personalmente, trato de evitar usar Facadestanto como puedo. El uso de funciones auxiliares globales es menos código y mucho más elegante.

ACTUALIZAR:

No use InputFacade ya que está obsoleto en Laravel v6 +


2
Esto funcionó para laravel 5.6, usar la solución de respuesta aceptada me causó un error.
Muhmmad Aziz

1
También implementé esto con éxito en un proyecto 5.3; También prefiero este método simple
kjones

3
Además, he notado que no es necesario utilizar except('page')esta solución.
BakerStreetSystems

1
Muy útil. Gracias
Viraj Amarasinghe

40

Tenga en cuenta de la Input::all(), incluirá los anteriores ?page=valores y otra vez en cada página se abre!
por ejemplo, si está dentro ?page=1y abre la página siguiente, se abrirá. ¡ ?page=1&page=2
Así que el último valor que tome la página será la página que vea! no es la página que quieres ver

Solución: use Input::except(array('page'))


39

Podrías usar

->appends(request()->query())

Ejemplo en el controlador:

$users = User::search()->order()->with('type:id,name')
    ->paginate(30)
    ->appends(request()->query());

return view('users.index', compact('users'));

Ejemplo en la vista:

{{ $users->appends(request()->query())->links() }}

3
Esta es la forma sugerida por Mohamed Said (empleado de Laravel), ver: github.com/laravel/framework/issues/…
Roy

1
Creo que esta es la mejor respuesta por lo que dijo @roy + mejores ejemplos. También tiene el ejemplo en Controller + View example.
Maky

2
Trabajó para mi. +1
Manoj Kumar

1
Esta es la mejor solución, esto también funcionó para mí
Jithin

28

No append()pero appends() así, la respuesta correcta es:

{!! $records->appends(Input::except('page'))->links() !!}

11

LARAVEL 5

La vista debe contener algo como:

{!! $myItems->appends(Input::except('page'))->render() !!}


5

Utilice esta construcción para mantener todos los parámetros de entrada excepto la página

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

¿Por qué?

1) quitas todo lo que agregó para pedir así

  $request->request->add(['variable' => 123]);

2) no necesita $ request como parámetro de entrada para la función

3) estás excluyendo "página"

PS) y funciona para Laravel 5.1


4

Incluya esto en su página de vista

 $users->appends(Input::except('page'))

4

para quien uno en laravel 5 o mayor en blade:

{{ $table->appends(['id' => $something ])->links() }}

puedes obtener el artículo pasado con

$passed_item=$request->id;

pruébalo con

dd($passed_item);

debes obtener $ algo de valor


1

Laravel 7.x ha agregado un nuevo método al paginador:

->withQueryString()

Entonces puedes usarlo como:

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

Para laravel por debajo de 7.x use:

{{ $users->appends(request()->query())->links() }}

0

Pase también el número de página para la paginación. Algo como esto

$currentPg = Input::get('page') ? Input::get('page') : '1';
    $boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.