Laravel Eloquent:订购所有()的结果

Mat*_*oal 191 sql-order-by laravel eloquent laravel-4

我陷入了一个简单的任务.我只需要订购来自此次通话的结果

$results = Project::all();
Run Code Online (Sandbox Code Playgroud)

Project模特在哪里 我试过这个

$results = Project::all()->orderBy("name");
Run Code Online (Sandbox Code Playgroud)

但它没有用.从表中获取所有数据并获取它们的更好方法是哪种?

Tra*_*s B 346

您实际上可以在查询中执行此操作.

$results = Project::orderBy('name')->get();
Run Code Online (Sandbox Code Playgroud)

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

  • 以及“get()”与“all()”的解释:/sf/ask/2421122021/ Between-eloquent-modelget-and-all/34587647#34587647 (2认同)
  • ->orderBy() 有两个参数;第二个可以是“asc”或“desc”,以升序或降序对结果进行排序。例如, `->orderBy('name', 'desc')` (2认同)

Yan*_*k Y 104

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

升序

$results = Project::all()->sortBy("name");
Run Code Online (Sandbox Code Playgroud)

降序排列

$results = Project::all()->sortByDesc("name");
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看有关集合的文档.

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

  • 我很想知道这是如何在幕后工作的.令我感到震惊,好像用`sortBy()`对集合进行排序发生在Laravel Engine(在PHP中),而`orderBy()`在数据库中完成.当然,数据库在几乎所有可能的情况下都会更快,并且随着数据集的增加,性能的差异也会增加.我很想听听别人对此的看法. (2认同)
  • @cartbeforehorse你需要知道哪个方法返回什么.:: all()可能只是调用 - > get()引擎盖,然后返回一个集合.sortBy()是一个集合的方法,所以是的,它发生在PHP端(而不是在查询对象上调用的orderBy()).根本不使用:: all(),更不用说在PHP中对它进行排序了.想象一下if :: all()返回一个包含数百万个对象的集合.获取它需要很长时间,甚至更多时间在PHP中对其进行排序.当然,你可以使用:: all(),如果你确定它只会返回一些对象(在集合中). (2认同)

ken*_*ard 29

另外,为了支持前面的答案,它可以通过添加或作为第二个参数desc按降序或升序排序asc.

$results = Project::orderBy('created_at', 'desc')->get();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Hed*_*ary 15

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

$results = Project::all()->orderBy("name");
Run Code Online (Sandbox Code Playgroud)

你必须以这种方式使用它:

$results = Project::orderBy('name')->get();
Run Code Online (Sandbox Code Playgroud)

默认情况下,您的数据按升序排列,但您也可以通过以下方式使用orderBy :

//---Ascending Order
$results = Project::orderBy('name', 'asc')->get();
//---Descending Order
$results = Project::orderBy('name', 'desc')->get();
Run Code Online (Sandbox Code Playgroud)


Seb*_*rin 14

2017年更新


Laravel 5.4为查询构建器添加了orderByDesc()方法:

$results = Project::orderByDesc('name')->get();
Run Code Online (Sandbox Code Playgroud)


DsR*_*Raj 10

虽然你需要结果日期作为desc

$results = Project::latest('created_at')->get();
Run Code Online (Sandbox Code Playgroud)


don*_*ona 7

做这个:

$results = Project::orderBy('name')->get();
Run Code Online (Sandbox Code Playgroud)

不要这样做:

$results = Project::all()->sortBy('name');
Run Code Online (Sandbox Code Playgroud)

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

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

Hal*_*zed 5

查看sortByEloquent的方法:http : //laravel.com/docs/eloquent


hkc*_*ant 5

请注意,您可以这样做:

$results = Project::select('name')->orderBy('name')->get();
Run Code Online (Sandbox Code Playgroud)

这会生成一个查询,如:

"SELECT name FROM proyect ORDER BY 'name' ASC"
Run Code Online (Sandbox Code Playgroud)

在一些应用中,当数据库没有优化,查询比较复杂,需要防止在结束SQL中生成ORDER BY时,可以这样做:

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();
Run Code Online (Sandbox Code Playgroud)

现在是 php 对结果进行排序。