Laravel Eloquent:all()的排序结果


214

我被困在一个简单的任务上。我只需要订购来自此电话的结果

$results = Project::all();

Project模型在哪里。我已经试过了

$results = Project::all()->orderBy("name");

但这没有用。从表中获取所有数据并对其进行排序的更好方法是哪种?

Answers:



114

如果仍要使用all(),因为它返回对象的集合,则仍可以使用sortBy(在集合级别)而不是orderBy(在查询级别)。

升序

$results = Project::all()->sortBy("name");

降序

$results = Project::all()->sortByDesc("name");

查看有关集合的文档以了解更多详细信息。

https://laravel.com/docs/5.1/collections


正是我想要的。与orderBy在查询级别使用相比,对此的广泛使用会带来不利影响吗?
Giedrius

1
\ @foreach($ posts-> sortByDesc('created_at')as $ post)\ @include('posts.post')\ @endforeach
sdexp

2
我有兴趣知道这是如何在后台工作的。令我sortBy()印象深刻的orderBy()是,对集合进行排序的过程是在Laravel Engine(在PHP中)中进行的,而在数据库中完成了。当然,在几乎所有可能的情况下,数据库都将更快,并且随着数据集的增加,性能上的差异也会随之增加。我很想听听其他人对此的想法。
cartbeforehorse

3
@cartbeforehorse您需要知道哪个方法返回什么。:: all()可能只是在后台调用-> get(),这反过来会返回一个集合。sortBy()是集合的方法,所以是的,它发生在PHP端(与在查询对象上调用的orderBy()相反)。根本不使用:: all()是一个坏主意,更不用说在PHP中对其进行排序了。想象一下:: all()是否返回包含一百万个对象的集合。提取它将花费很长时间,而在PHP中对其进行排序甚至需要更多时间。当然,如果您确定可以返回::少数对象(在集合中),则可以使用:: all()。
阿夫兰

为什么这个不是被接受的答案?它与all()函数一起工作。
VishalParkash

36

另外,仅是为了支持前面的答案,还可以通过添加第二个参数来按降序desc或升序对它进行排序asc

$results = Project::orderBy('created_at', 'desc')->get();


10

虽然您需要日期的结果作为Desc

$results = Project::latest('created_at')->get();

9

做这个:

$results = Project::orderBy('name')->get();

请勿这样做:

$results = Project::all()->sortBy('name');

为什么? 简而言之,第一种方法比第二种方法快。


3
最好添加解释原因:第一种方法使数据库(查询)级别的订单几乎总是效率更高-最佳性能。我会说总是使用模型方法,当您需要第二种方法时,您会知道:)
jave.web


4

注意,您可以执行以下操作:

$results = Project::select('name')->orderBy('name')->get();

这将生成一个查询,例如:

"SELECT name FROM proyect ORDER BY 'name' ASC"

在某些应用中,当数据库未优化且查询更为复杂,并且需要阻止在完成的SQL中生成ORDER BY时,您可以执行以下操作:

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();

现在是php谁订购结果。


0

您的指令需要调用才能获得,因为它带来了记录和订单按目录

$results = Project::orderBy('name')
           ->get();

例:

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();

在该示例中,数据按“ where”过滤,并带来大于20的记录,并按从高到低的顺序带来orderBy目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.