Pagination для результатов поиска laravel 5.3

Результаты поиска по страницам

Я только начал с Laravel и я пытаюсь сделать функцию поиска с правильной нумерацией страниц. Функция работает для страницы один, но на странице два это не так. Я думаю, что это не дает результатов на следующей странице, но я не могу найти ответ.


это моя функция поиска внутри IndexController:

public function search()
{
    $q = Input::get('search');

    # going to next page is not working yet
    $product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);

    return view('pages.index', compact('product'));
}

это мой маршрут:

Route::post('search{page?}', 'IndexController@search');

это URL второй страницы:

/search?page=2

вот как я показываю свою разбивку на страницы:

{{ $product->appends(Request::get('page'))->links()}}

ошибки:

MethodNotAllowedHttpException in RouteCollection.php line 218:

появляется ошибка по запросу.

маршрут:

Route::get('search/{page?}', 'IndexController@search');

ошибка:

MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 780
at Router->findRoute(object(Request)) in Router.php line 610
at Router->dispatchToRoute(object(Request)) in Router.php line 596
at Router->dispatch(object(Request)) in Kernel.php line 267
at Kernel->IlluminateFoundationHttp{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->IlluminateRouting{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->IlluminatePipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->IlluminateRouting{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53

Я надеюсь, что мой вопрос ясен и в правильном формате. Заранее спасибо (извините за мой плохой Английский)


ответ:

я закончил использование ответа на этот пост в сочетании с некоторой помощью этой в должности

я использовал функцию post для начального поиска и функцию get для следующих страниц. Это было возможно, потому что теперь я даю свой поиск по URL-адресу.


EDIT:

  • добавлена начальная ошибка.
  • добавлена Route::get
  • добавил ответ

5 ответов


Если вы хотите применить фильтр к следующей странице, вы должны добавить их в свой пагинатор такой:

$product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);
$product->appends(['search' => $q]);

и изменить маршрут от поста, чтобы получить:

Route::get('search', 'IndexController@search');

Route::get('product', function () {
    $product= App\product::paginate(15);

    $product->setPath('custom/url');

});

вид:

{{ $product->appends(['search' => Request::get('page')])->links() }}

$searchdata =  \Request::get( 'inputTextFieldname' ); \make as global
$searchresult = Modelname::where ( 'blogpost_title', 'LIKE', '%' .$searchdata . '%' )->paginate(2);
return view( 'search', compact('searchresult') );

и в разделе

{{$searchresult->appends(Request::only('inputTextFieldname'))->links()}}

сделайте свой маршрут, чтобы получить метод

Route::get('/search', ['as' => 'search', 'uses' => 'searchController@index']);

это будет сделано, спасибо,


Я предполагаю, что вы хотите изменить URL-адреса страниц с такой search/1, search/2? Прежде всего, ваш маршрут должен быть, наверное Route::post('search/{page?}').

Я не уверен, что только это изменение будет работать, но если это не так, вы должны решить страницу, как это

public function search(\Illuminate\Http\Request $request, $page = 1)
{
    $q = $request->get('search');

    \Illuminate\Pagination\Paginator::currentPageResolver(function () use ($page) {
        return $page;
    });

    # going to next page is not working yet
    $product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);

    return view('pages.index', compact('product'));
}

для разбиения на страницы вы должны создать простую форму:

<form action="{{URL::to('/search')}}" method="post">
    <input type="hidden" name="query"/>
    <select name="pages">
    @for($p = 1; $p < $products->lastPage(); $p++ )
        <option value="{{ $p }}">{{ $p }}</option>
    @endfor
    </select>
</form>

методы разбиения на страницы здесь:

$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (Not available when using simplePaginate)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (Not available when using simplePaginate)
$results->url($page)