Laravel雄辩:所有()的排序结果

Laravel雄辩:所有()的排序结果,laravel,laravel-4,eloquent,sql-order-by,Laravel,Laravel 4,Eloquent,Sql Order By,我被一项简单的任务困住了。 我只需要订购这次电话的结果 $results = Project::all(); 其中,Project是一个模型。我试过这个 $results = Project::all()->orderBy("name"); 但它不起作用。从表中获取所有数据并对其进行排序的更好方法是什么 检查sortBy方法的雄辩性:您实际上可以在查询中这样做 $results = Project::orderBy('name')->get(); 这将以正确的顺序返回所有结果。

我被一项简单的任务困住了。 我只需要订购这次电话的结果

$results = Project::all();
其中,
Project
是一个模型。我试过这个

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

但它不起作用。从表中获取所有数据并对其进行排序的更好方法是什么

检查
sortBy
方法的雄辩性:

您实际上可以在查询中这样做

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

这将以正确的顺序返回所有结果。

此外,为了支持前面的答案,还可以通过添加作为第二个参数,以降序
desc
或升序
asc
顺序对其进行排序

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

如果仍然希望使用all(),因为它返回一个对象集合,那么仍然可以使用sortBy(在集合级别)而不是orderBy(在查询级别)

升序

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

$results = Project::all()->sortBy("name");
$results = Project::all()->sortByDesc("name");
查看有关集合的文档以了解更多详细信息

2017年更新
Laravel 5.4向查询生成器添加了orderByDesc()方法:

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

而您需要日期为desc的结果

$results = Project::latest('created_at')->get();
注意,您可以执行以下操作:

$results = Project::select('name')->orderBy('name')->get();
$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();
这将生成如下查询:

"SELECT name FROM proyect ORDER BY 'name' ASC"
在某些应用程序中,当数据库未优化且查询更复杂,并且您需要在finish SQL中生成ORDER BY时,您可以执行以下操作:

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

现在是排序结果的php。

执行以下操作:

$results = Project::orderBy('name')->get();
$results = Project::all()->sortBy('name');
为什么? 因为它很快!排序在数据库中完成

不要这样做:

$results = Project::orderBy('name')->get();
$results = Project::all()->sortBy('name');
为什么?
因为它的速度很慢。首先,行从数据库中加载,然后加载到Laravel的Collection类中,最后在内存中排序。

您的指令需要调用才能获取,因为它会按目录带来记录和排序

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

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();
在本例中,数据按“where”进行过滤,并按顺序从高到低带出大于20的记录和orderBy catalog。

尝试以下方法:

$categories     =   Category::all()->sortByDesc("created_at");

一件有趣的事情是多订单:

根据:

这意味着laravel将根据
优先级
属性对结果进行排序。完成后,它将在内部基于
电子邮件
以相同的
优先级对结果进行排序

编辑:

正如@HedayatullahSarwary所说的,建议您更喜欢雄辩而不是QueryBuilder。当然,我不鼓励使用QueryBuilder,我们都知道每个人都有自己的用例

那我为什么要用QueryBuilder写一个答案呢?正如我们所看到的:

您可以将每个雄辩的模型看作是一个强大的查询生成器,允许您流畅地查询与模型关联的数据库表

顺便说一句,上面的代码应该是这样的:

Project::orderBy('priority', 'desc')
->orderBy('email', 'asc')
->get();

在Laravel Eloquent中,您必须创建如下查询,它将从数据库获取所有数据,您的查询不正确:

$results = Project::all()->orderBy("name");
您必须以这种方式使用它:

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


正是我想要的。与在查询级别使用
orderBy
相比,广泛使用它会有任何缺点吗?\@foreach($posts->sortByDesc('created_at')as$post)\@include('posts.post')\@endforeachI我想知道这在幕后是如何工作的。在我看来,使用
sortBy()
对集合进行排序似乎是在Laravel引擎(在PHP中)内部进行的,而
orderBy()
是在数据库中完成的。当然,数据库在几乎所有可能的情况下都会更快,而且随着数据集的增加,性能差异也会随之增加。我很想听听其他人对此的想法。@cartforehorse您需要知道哪个方法返回什么:all()可能只是在引擎盖下调用->get(),然后返回一个集合。sortBy()是一个集合的方法,所以它发生在PHP端(与对查询对象调用的orderBy()相反)。完全使用::all()是个坏主意,更不用说在PHP中对其排序了。想象一下,如果::all()返回一个包含一百万个对象的集合。获取它将花费太长的时间,在PHP中对它进行排序甚至需要更多的时间。当然,如果您确信::all()只返回少数对象(在集合中),那么可以使用::all()?它与all()函数一起工作。以下是文档:
get()
vs
all()
:->orderBy()有两个参数;第二个可以是“asc”或“desc”,以升序或降序对结果进行排序。例如,
->orderBy('name','desc')
最好添加解释:第一种方法在数据库(查询)级别生成订单,这几乎总是更高效—性能最佳。我会说,始终使用模型方法,当您需要第二种方法时,您会知道:)我认为第二种方法具有更好的性能。因为首先,记录是通过更高效的默认排序列获取的。然后在代码中进行排序。@AliN11否。第一个执行得更快。这是在数据库级别完成的。您已经在Laravel查询生成器中创建了查询,应该使用Laravel Eloquent。@HedayatullahSarwary没有什么区别。我编辑了回复。看一看!