如果我有一个Illuminate\Support\Collection,我如何通过asc和desc对多个属性进行排序?(这是一个简单的假设-根本不需要查询构建技巧。
$collection = User::all(); // not looking for User::orderBy()->get() solutions. Read the question.
$sorting_insructions = [
['column'=>'first_name', 'order'=>'asc'],
['column'=>'date_of_birth', 'order'=>'desc'],
];
$collection->sort(function($a,$b) use ($sorting_instructions){
// something...
});
5条答案
按热度按时间yfjy0ee71#
我知道这个问题是从一段时间以前,但如果有人偶然发现它,Laravel现在确实提供了这个功能(v8.x在编写时)。
更多细节请参见官方文档。(排序方式部分的第4个代码块示例)https://laravel.com/docs/8.x/collections#method-sortby
来自文档:
应用于问题中的示例:
dced5bon2#
不管是谁使用它,只要记住-你需要根据你使用的是对象集合还是关联数组来调整它。应该是一个简单的调整。只要把$a[]/$b[]的东西改为$a-〉和$b-〉
14ifxucb3#
就像这样简单:
将那些要排序的字段添加为具有字段名和方向的数组。
:)
fdx2calv4#
如果你使用Eloquent来获取你的集合示例,在你的查询中使用orderBy方法会更好,特别是当列被索引时:
EDIT由于问题经过编辑,说明sort应该在查询构建器之外使用,我认为从
$sorting_insructions
开始以相反顺序链接sortBy和sortByDesc会得到相同的结果:zynd9foi5#
让我们想象一些必要的事情...