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

时间:2018-11-17 22:02:20

标签: laravel

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

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

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

5 个答案:

答案 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可以是stringcallable,因此您的代码看起来像这样,项目降序排列:

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

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