在 Laravel 中对分页变量进行排序

Posted

技术标签:

【中文标题】在 Laravel 中对分页变量进行排序【英文标题】:Sort a Paginated variable in Laravel 【发布时间】:2019-04-27 17:12:13 【问题描述】:

我正在尝试在 Laravel 中对分页查询结果进行排序。我需要通过将所有内容的末尾降序到我的分页变量来进行排序。

例子:

//get some data attach to variable
$variable = DB::table('exampletable')
->where('id',$somevariable)
->select('id','name')
->paginate(10);

//this function will send the variable and attach **total** on each object
$variable = $this->aFunction($variable);

//What I am trying to do, THIS is where I have to sort in the data flow
$variable->sortBy('total', 'desc');

//return data in json format
return response()->json($variable);

我已经尝试像上面所说的那样对它进行排序,但我最终得到的变量只是在每个段/对象上都有名称。我已经尝试过,这是我不断得到的结果:


"0":
      "id": "1",
      "name": "somename",
      "total": "15",
    ,
"1":
      "id": "2",
      "name": "somename2",
      "total": "100",
    ,
"2":
      "id": "3",
      "name": "somename5",
      "total": "26",
    ,

我想要达到的结果是:

"current_page": 1,
"data": [
  
      "id": "2",
      "name": "somename2",
      "total": "100",
    ,
 
      "id": "3",
      "name": "somename5",
      "total": "26",
    ,
 
      "id": "1",
      "name": "somename",
      "total": "15",
    ,
]

【问题讨论】:

【参考方案1】:

一般

$paginatedUsers 是此处记录的 LengthAwarePaginator 的一个实例: https://laravel.com/api/5.7/Illuminate/Pagination/LengthAwarePaginator.html#method_presenter

我们可以使用setCollection 来改变底层集合。和items()只提取当前页面的对象。然后在收集之后,我们可以随意排序。

$paginatedUsers = User::paginate(3)

$paginatedUsers->setCollection(
    collect(
        collect($paginatedUsers->items())->sortBy('name')
    )->values()
);

完整解决方案(假设aFunction仍然返回一个Paginator对象)

//get some data attach to variable
$variable = DB::table('exampletable')
->where('id',$somevariable)
->select('id','name')
->paginate(10);

//this function will send the variable and attach **total** on each object
$variable = $this->aFunction($variable);

$variable->setCollection(
    collect(
        collect($variable->items())->sortByDesc('total')
    )->values()
);

//return data in json format
return response()->json($variable);

【讨论】:

我已经很接近了!感谢您提供的示例非常有帮助,我刚刚阅读了该文档,谢谢。如果有意义的话,我几乎需要降低一层,以便获取变量并按降序排序。不过谢谢你,如果你知道我的意思,请更新你的评论。 更新了答案。看来您可能还需要在某些时候添加 ->values(),但我相信您会弄清楚的。

以上是关于在 Laravel 中对分页变量进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Vue JS 对分页 Laravel 结果的实时客户端搜索过滤器

如何使用 MongoDB 中的自定义字段对分页进行索引和排序,例如:名称而不是 id

laravel5.5中添加对分页样式的修改上一页和下一页

如何在laravel中对相关模型进行分页

如何在 Laravel 5 中对合并的集合进行分页?

如何在 laravel&Vue 中对数据进行分页?