다른 GET 매개 변수를 포함하지 않는 Laravel 페이지 매김 링크


102

나는 Laravel 4의 Pagination 클래스와 함께 Eloquent를 사용하고 있습니다.

문제점 : URL에 일부 GET 매개 변수가있는 경우 (예 http://site.com/users?gender=female&body=hot:) 생성 된 페이지 매김 링크는 page매개 변수 만 포함하고 다른 것은 포함 하지 않습니다.

블레이드 템플릿

{{ $users->link() }}

이에 대한 ->append()기능이 있지만 GET 매개 변수가 몇 개 있는지 모를 때 블레이드 템플릿을 엉망으로 append()만드는 if코드 덩어리없이 페이지가 매겨진 링크에 다른 GET 매개 변수를 포함하는 데 어떻게 사용할 수 있습니까?

답변:


121

편집 : Mehdi의 답변에 대한 Connor의 의견은이 작업을 수행하는 데 필요합니다. 그들의 설명에 대해 둘 다 감사합니다.

->appends()배열을 매개 변수로 받아 들일 수 있습니다. 전달 Input::except('page')하면 트릭을 수행해야합니다.

예:

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

37
이 방법으로 오는 다른 Google 직원을위한 참고 사항입니다 . 이제는 복수형 appends아닙니다 append . 올바른 연결은 다음과 같습니다$query->appends($foo)->links();
Connor Peet

6
$query->appends(Input::except('page'))->links();더 잘 작동 함을 알았습니다 . 그렇지 않으면 페이지를 클릭 할 때 페이지 변수가 업데이트되지 않았습니다. 라 라벨 4.1.24.
bitlather 2014 년

... 그리고 아래로 스크롤하여 Mehdi의 솔루션을 확인했습니다.
bitlather 2014 년

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

2
laravel 5.2에서는 Input 대신 Request를 사용해야합니다
Christophvh

104

Laravel 5에서이 코드를 사용해야한다고 생각합니다. 또한 이것은 매개 변수 page뿐만 아니라 다른 매개 변수에서도 작동합니다 .

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

개인적 Facades으로 가능한 한 많이 사용하지 않으려 고 노력합니다 . 전역 도우미 함수를 사용하는 것은 코드가 적고 훨씬 우아합니다.

최신 정보:

InputLaravel v6 +에서 더 이상 사용되지 않으므로 Facade를 사용하지 마십시오.


2
이것은 laravel 5.6에서 작동했으며 수락 된 답변 솔루션을 사용하면 오류가 발생했습니다.
Muhmmad Aziz

1
나는 또한 이것을 5.3 프로젝트에서 성공적으로 구현했습니다. 나뿐만 아니라이 간단한 방법을 선호
kjones

3
또한 except('page')이 솔루션 을 사용할 필요가 없다는 것을 알게되었습니다 .
BakerStreetSystems

1
매우 유용합니다. 감사합니다
Viraj Amarasinghe 2011

40

주의Input::all()는 이전 포함, ?page=열려 각 페이지에 또 다시 값을!
예를 들어 ?page=1다음 페이지를 열고 다음 페이지를 열면 열릴 것입니다. ?page=1&page=2
따라서 마지막 값 페이지가 보는 페이지가됩니다! 보고 싶은 페이지가 아닙니다.

해결책 : 사용 Input::except(array('page'))


39

당신은 사용할 수 있습니다

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

컨트롤러의 예 :

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

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

보기의 예 :

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

3
이것은 Mohamed Said (Laravel 직원)가 제안한 방법입니다. 참조 : github.com/laravel/framework/issues/…
Roy

1
@roy가 말한 것 + 더 나은 예 때문에 이것이 최선의 대답이라고 생각합니다. 또한 in Controller 예제 +보기 예제가 있습니다.
Maky

2
나를 위해 일했습니다. +1
Manoj Kumar

1
이것은 최선의 솔루션이뿐만 아니라 나를 위해 일한다
Jithin

28

하지 append()appends() 그래서 정답은 :

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

11

LARAVEL 5

보기에는 다음과 같은 내용이 포함되어야합니다.

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


5

페이지를 제외한 모든 입력 매개 변수를 유지하려면이 구성을 사용하십시오.

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

왜?

1) 요청에 추가 된 모든 것을 제거합니다.

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

2) 함수에 대한 입력 매개 변수로 $ request가 필요하지 않습니다.

3) "페이지"를 제외합니다.

PS) 및 Laravel 5.1에서 작동합니다.



4

블레이드에서 laravel 5 이상에있는 사람 :

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

당신은 통과 된 항목을 얻을 수 있습니다

$passed_item=$request->id;

그것을 테스트

dd($passed_item);

$ something 가치를 얻어야합니다


1

Laravel 7.x는 페이지 관리자에 새로운 방법을 추가했습니다.

->withQueryString()

따라서 다음과 같이 사용할 수 있습니다.

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

7.x 이하의 laravel의 경우 다음을 사용하십시오.

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

0

페이지 매김을 위해 페이지 번호도 전달하십시오. 이 같은

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.