我想按名称列对集合进行排序。使用sortBy()方法无效。
$collection = \App\Http\Resources\MyResource::collection($test);
return $collection->sortBy('name');
答案 0 :(得分:2)
对我来说,仅与docs
中的示例完全一样$statisticCollection = collect($statistics);
$sorted = $statisticCollection->sortByDesc('date');
return $sorted->values()->all();
所以问题是我没有将排序后的结果保存到变量中,然后返回它。
答案 1 :(得分:1)
我发现,按照文档中的建议,我必须在排序后使用values()
。
答案 2 :(得分:0)
如果Laravel默认排序不适用于您的目的,请尝试执行以下操作:
$collection = \App\Http\Resources\MyResource::collection->sortBy(function ($element, $key) {
return yourFunctionForSorting($element['name']);
});
用您的排序标准明显替换“ yourFunctionForSorting”。
答案 3 :(得分:0)
您想要做的是:
$collection = \App\Http\Resources\MyResource::collection($test);
return $collection->sortBy('name')->all();
在docs中检查其操作方式。
答案 4 :(得分:0)
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
可以是string
或callable
,因此您的代码看起来像这样,项目降序排列:
$collection = \App\Http\Resources\MyResource::collection($test);
return $collection->sortByDesc('name')->all();