[鐵柱分享]第五期:如何在 Laravel Eloquent 中對 all() 的結果進行排序?

shebaoting發表於2021-07-08

介紹

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方法,但是如果像上面這樣能夠輕鬆地在集合層面上對結果進行排序還是很方便的。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
烏鴉嘴新手社群 wyz.xyz 為技術新手提供服務

相關文章