如何在 Laravel Eloquent 中排序关联模型的结果?


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 by。使用的表是 **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

使用 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/>"; } } }

输出

上述代码的输出为 -

更新于: 2022-08-30

381 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.