Laravel sortBy()无法对集合进行排序

2w3rbyxf  于 2023-04-07  发布在  其他
关注(0)|答案(6)|浏览(300)

我想按名称列对集合进行排序。使用sortBy()方法不起作用。

$collection = \App\Http\Resources\MyResource::collection($test);

    return $collection->sortBy('name');
5jvtdoz2

5jvtdoz21#

对我来说,只有工作的例子完全一样,在文档

$statisticCollection = collect($statistics);

$sorted = $statisticCollection->sortByDesc('date');

return $sorted->values()->all();

所以问题是我没有在返回之前将排序结果保存到变量中。

7eumitmz

7eumitmz2#

我发现在排序后必须使用values(),这是文档中的建议。

gstyhher

gstyhher3#

你要做的是:

$collection = \App\Http\Resources\MyResource::collection($test);

return $collection->sortBy('name')->all();

检查文档中是如何完成的。

li9yvcax

li9yvcax4#

Laravel的默认sortBy定义为升序:

public function sortBy($callback, $options = SORT_REGULAR, $descending = false)

如果你想用sortByDesc进行降序排序:

public function sortByDesc($callback, $options = SORT_REGULAR)
{
    return $this->sortBy($callback, $options, true);
}

其中第一个参数$callback可以是stringcallable,因此您的代码可能看起来像这样,其中项目按降序排序:

$collection = \App\Http\Resources\MyResource::collection($test);

return $collection->sortByDesc('name')->all();
sbdsn5lh

sbdsn5lh5#

问题是\App\Http\Resources\MyResource::collection()没有方法sortBy()。它是另一种类型的集合(AnonymousResourceCollection)。
作为一种解决方法,您可以将其转换为\Illuminate\Support\Collection,如下所示:

$collection = \App\Http\Resources\MyResource::collection($test);

$convertedCollection = collect($collection);

return $convertedCollection->sortBy('name')->toArray();
dba5bblo

dba5bblo6#

如果Laravel的默认排序不符合你的目的,试着这样做:

$collection = \App\Http\Resources\MyResource::collection->sortBy(function ($element, $key) {
  return yourFunctionForSorting($element['name']);
 });

用你的排序标准替换“yourFunctionForSorting”。

相关问题