在 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 结果的实时客户端搜索过滤器