如何在 Laravel Eloquent 中对相关模型的结果进行排序?
laravelphpserver side programming更新于 2025/4/30 0:52:17
Laravel Eloquent 自带 orderBy() 方法,可用于对模型结果进行排序。我们将使用如下所示的 Users 表 -

让我们创建另一个表 user_roles,其中包含以下数据 -

示例 1
以下示例展示如何使用 orderBy 对结果进行排序。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Str; //use Illuminate\Support\Facades\DB; class UserController extends Controller{ public function index() { $users = User::orderBy('name', 'ASC')->take(10)->get(); foreach ($users as $user) { echo $user->name."<br/>"; } } }
上例中使用的查询如下:-
SELECT name from users order by name ASC limit 10;
mysql 中的输出如下:-

输出
在 Laravel 浏览器中查看时的输出如下:-

示例 2
在本例中,我们将了解如何通过连接两个表来使用 order。正在使用的表是 users 和 user_roles 表。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller{ public function index() { $users = User::join('user_roles', 'users.id', '=', 'user_roles.user_id') ->orderBy('users.name', 'ASC') ->select('users.*') ->paginate(10); foreach ($users as $user) { echo $user->name."<br/>"; } } }
输出
上述代码的输出如下:-

上述示例的查询语句为:-
SELECT u.* From users u INNER JOIN user_roles ur ON u.id = ur.user_id ORDER BY u.name ASC;
MySQL 中的输出为 −

示例 3
另一个使用 orderBy 按降序获取记录的示例如下 −
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Str; //use Illuminate\Support\Facades\DB; class UserController extends Controller{ public function index() { $users = User::orderBy('id', 'desc')->select('users.*') ->take(10)->get(); foreach ($users as $user) { echo $user->name."<br/>"; } } }
输出
上述代码的输出是 −

示例 4
使用 name 的 orderBy 来按降序获取记录
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Str; //use Illuminate\Support\Facades\DB; class UserController extends Controller{ public function index() { $users = User::orderBy('name', 'desc')->select('users.*') ->take(10)->get(); foreach ($users as $user) { echo $user->name."<br/>"; } } }
输出
上述代码的输出是 −


