我想按名称列对集合进行排序。使用sortBy()方法不起作用。
$collection = \App\Http\Resources\MyResource::collection($test); return $collection->sortBy('name');
5jvtdoz21#
对我来说,只有工作的例子完全一样,在文档
$statisticCollection = collect($statistics); $sorted = $statisticCollection->sortByDesc('date'); return $sorted->values()->all();
所以问题是我没有在返回之前将排序结果保存到变量中。
7eumitmz2#
我发现在排序后必须使用values(),这是文档中的建议。
values()
gstyhher3#
你要做的是:
$collection = \App\Http\Resources\MyResource::collection($test); return $collection->sortBy('name')->all();
检查文档中是如何完成的。
li9yvcax4#
Laravel的默认sortBy定义为升序:
public function sortBy($callback, $options = SORT_REGULAR, $descending = false)
如果你想用sortByDesc进行降序排序:
sortByDesc
public function sortByDesc($callback, $options = SORT_REGULAR) { return $this->sortBy($callback, $options, true); }
其中第一个参数$callback可以是string或callable,因此您的代码可能看起来像这样,其中项目按降序排序:
$callback
string
callable
$collection = \App\Http\Resources\MyResource::collection($test); return $collection->sortByDesc('name')->all();
sbdsn5lh5#
问题是\App\Http\Resources\MyResource::collection()没有方法sortBy()。它是另一种类型的集合(AnonymousResourceCollection)。作为一种解决方法,您可以将其转换为\Illuminate\Support\Collection,如下所示:
\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();
dba5bblo6#
如果Laravel的默认排序不符合你的目的,试着这样做:
$collection = \App\Http\Resources\MyResource::collection->sortBy(function ($element, $key) { return yourFunctionForSorting($element['name']); });
用你的排序标准替换“yourFunctionForSorting”。
6条答案
按热度按时间5jvtdoz21#
对我来说,只有工作的例子完全一样,在文档
所以问题是我没有在返回之前将排序结果保存到变量中。
7eumitmz2#
我发现在排序后必须使用
values()
,这是文档中的建议。gstyhher3#
你要做的是:
检查文档中是如何完成的。
li9yvcax4#
Laravel的默认sortBy定义为升序:
如果你想用
sortByDesc
进行降序排序:其中第一个参数
$callback
可以是string
或callable
,因此您的代码可能看起来像这样,其中项目按降序排序:sbdsn5lh5#
问题是
\App\Http\Resources\MyResource::collection()
没有方法sortBy()
。它是另一种类型的集合(AnonymousResourceCollection
)。作为一种解决方法,您可以将其转换为
\Illuminate\Support\Collection
,如下所示:dba5bblo6#
如果Laravel的默认排序不符合你的目的,试着这样做:
用你的排序标准替换“yourFunctionForSorting”。