265

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

$results = Project::all();

哪里Project有模特。我试过这个

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

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

4

12 回答 12

465

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

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

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

于 2013-07-02T17:37:43.727 回答
142

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

升序

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

降序排列

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

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

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

于 2016-03-10T16:58:22.257 回答
44

此外,为了支持前一个答案,它也可以通过添加作为第二个参数以降序desc或升序排序。asc

$results = Project::orderBy('created_at', 'desc')->get();
于 2016-02-12T12:56:47.517 回答
21

做这个:

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

为什么? 因为速度快!排序在数据库中完成。

不要这样做:

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

为什么? 因为它很。首先,行从数据库中加载,然后加载到 Laravel 的 Collection 类中,最后在内存中排序。

于 2018-08-30T02:01:00.210 回答
18

2017 年更新


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

$results = Project::orderByDesc('name')->get();
于 2017-03-22T18:20:37.380 回答
12

虽然您需要日期的结果为 desc

$results = Project::latest('created_at')->get();
于 2018-02-23T06:07:36.537 回答
5

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

于 2013-07-02T15:42:51.213 回答
5

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

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

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

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

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

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

或按降序排列:

$results = Project::orderBy('name', 'desc')->get();
于 2021-03-10T06:25:56.377 回答
5

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

$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。

于 2018-08-08T18:59:51.293 回答
0

你的指令需要调用才能获取,因为它是通过目录带来的记录和订单

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

例子:

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

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

于 2020-06-24T03:50:16.147 回答
0

一件有趣的事情是多重排序:

根据laravel 文档

DB::table('users')
   ->orderBy('priority', 'desc')
   ->orderBy('email', 'asc')
   ->get();

这意味着 laravel 将根据priority属性对结果进行排序。完成后,它将priority基于email内部对结果进行排序。

编辑:

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

无论如何,为什么我用 QueryBuilder 写了一个答案?正如我们在雄辩的文件中看到的:

您可以将每个 Eloquent 模型视为一个强大的查询构建器,让您可以流畅地查询与模型关联的数据库表。

BTWS 上面带有 eloquent 的代码应该是这样的:

Project::orderBy('priority', 'desc')
->orderBy('email', 'asc')
->get();
于 2021-01-24T15:24:41.807 回答
-1

尝试这个:

$categories     =   Category::all()->sortByDesc("created_at");
于 2020-10-14T12:14:47.747 回答