[铁柱分享]第五期:如何在 Laravel Eloquent 中对 all() 的结果进行排序?

Laravel框架
484
0
0
2022-05-13

介绍

Laravel 附带的 Eloquent ORM 为您提供了一种与数据库交互的简单方法。 这简化了所有 CRUD(创建、读取、更新和删除)操作和任何其他数据库查询。

Laravel 提供了许多方便的方法,你可以使用它们来处理您的 Eloquent 集合。 通常,当从数据库中获取一些结果时,你会希望根据特定条件对它们进行排序。

在本教程中, 你将学习如何在 Laravel Eloquent 中 对 all() 结果进行排序

我们将在本教程中 使用一个称为 Post 的模型示例 。

在查询层面对结果进行排序

在介绍如何在集合层面对结果进行排序之前,让我们首先简要介绍如何在查询层面对结果进行排序。

假设我们想按名称对所有帖子进行排序。 从数据库中获取结果时,我们可以使用 orderBy 方法后接 get 方法:

$posts = Post::orderBy('name')->get();

如果你使用了 toSql() 方法而不是 get() ,这时候我们用 dd 打印输出,如下所示:

$posts = Post::orderBy('name')->toSql();
dd($posts);

实际查询,你将得到以下输出:

"select * from `posts` order by `name` asc";

如你所见,该 orderBy 方法实际上代表了 ORDER BY SQL 中 的 函数。

默认情况下,Eloquent 将按升序排序,但您也可以使用以下 orderByDesc() 方法 按降序排序 :

$posts = Post::orderByDesc('name')->get();

要了解有关 SQL 的更多信息,你可以 查看这个B站教程

但是,如果使用 all() 而不是 get() ,首先从数据库中获取所有信息并将它们存储在集合中。 一旦你准备好了集合,你就需要使用可用的 Laravel 集合方法 而不是 eloquent 方法。

在集合层面对结果进行排序 all()

综上所述,您可以在构建查询时使用 Eloquent 方法,这是对结果进行排序的更有效方式。 但是你也可以使用可用的集合方法来对集合的内容进行排序。

这意味着在集合层面,你可以使用可用的sortBy方法,而不是orderBy方法,后者可以在查询层面使用。

与 Eqluent 方法类似,您可以使用 sortBy 方法 按升序排序,使用 sortByDesc 方法按降序排序 :

  • 升序:
$posts = Post::all();
$posts->sortBy("name");
  • 降序:
$posts = Post::all();
$posts->sortByDesc("name");

或者,您也可以链式使用该方法:

// 升序
$posts = Post::all()->sortBy("name");
//降序
$posts = Post::all()->sortByDesc("name");

在很多时候,我习惯使用orderBy方法,但是如果像上面这样能够轻松地在集合层面上对结果进行排序还是很方便的。