如何自动将查询字符串附加到laravel分页链接?

时间:2014-07-22 15:18:02

标签: laravel-4 pagination

我正在使用Laravel和Ajax调用复选框点击搜索过滤器。当我点击一个复选框时,我得到了结果。我的查询如下:

    $editors = User::with(['editor.credentials','editor.specialties','editor.ratings']);
        $temp=$editors->whereHas('editor', function($q) use ($a_data){
            $q->whereHas('specialties',function($sq) use($a_data){
            $sq->whereIn('specialty',$a_data);
            });
        })->paginate(2);

这给了我所需的所有数据。但是我应该如何获得分页链接?

    $temp->setBaseUrl('editors');
    $links = $temp->links()->render();

我目前正在执行此操作并使用$ link作为对ajax调用的响应,我使用$ links数据设置了分页。现在,我需要将查询附加到下一页,如page = 2?query =" something"。我不知道如何将剩余的查询结果链接附加到下一页链接。即我不知道查询中应该包含什么="某些东西"部分。有人可以指导我。感谢

10 个答案:

答案 0 :(得分:73)

{{ $users->appends($_GET)->links() }}

它会将所有查询字符串参数附加到分页链接

答案 1 :(得分:16)

检查来自@Arda的答案,作为它的全球解决方案。您可以在下面找到如何手动完成的操作。

在Paginator上使用appends

$querystringArray = Input::only(['search','filter','order']); // sensible examples

// or:
$querystringArray = ['queryVar' => 'something', 'anotherVar' => 'something_else'];

$temp->appends($querystringArray);

答案 2 :(得分:14)

在你的应用程序的任何地方添加它(例如routes.php,filters.php或任何自动加载的),无需编辑已经写入的任何分页代码。这可以使用视图编辑器完美地工作,您不需要知道任何查询字符串参数:

////////PAGINATION QUERY STRING APPEND
View::composer(Paginator::getViewName(), function($view) {
    $queryString = array_except(Input::query(), Paginator::getPageName());
    $view->paginator->appends($queryString);
});
//////////////////

答案 3 :(得分:12)

对于目前最新版本的Laravel(5.2),您可以使用Request facade来检索查询字符串并将其传递给您的paginator的appends()方法

$input = Request::input();
$myModelsPaginator = App\Models\MyModel::paginate();
$myModelsPaginator->appends($input);

答案 4 :(得分:8)

附加除实际页面,表单标记以及您不想传递的内容之外的所有输入:

$paginatedCollection->appends(request()->except(['page','_token']));

答案 5 :(得分:5)

从Laravel 7开始,您可以在withQueryString()实例上调用Paginator方法。

文档引用:

如果您希望将所有当前查询字符串值附加到分页链接,则可以使用withQueryString方法:

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

请参见“附加到分页链接”:https://laravel.com/docs/7.x/pagination#displaying-pagination-results

答案 6 :(得分:4)

从先前的答案中得到启发,我最终将服务容器用于前端+ API支持。

在您的public override void PreInitialize() { // ... IocManager.IocContainer.Register( Component.For<IAbpSession, TestAbpSession>() .ImplementedBy<MyTestAbpSession>() .LifestyleSingleton() .IsDefault() ); } 方法中:

AppServiceProvider@boot()

答案 7 :(得分:3)

在您显示分页的视图中...

{{ $results->appends(Request::except('page'))->links() }}

appends保留查询字符串值(“页面”除外)。不确定是否可以与POST请求一起使用

答案 8 :(得分:1)

  {{ $users->appends(Request::only(['filter','search']))->links()}}

答案 9 :(得分:-1)

您可以在视图中使用请求帮助器

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