如何使用查询生成器在 Laravel Eloquent 查询中为表添加别名?
laravelphpserver side programming更新于 2025/4/30 2:52:17
Eloquent 是一个新的对象关系映射器 (ORM),有助于与数据库交互。使用 Eloquent,每个表都有一个映射模型,负责处理该表上的所有操作。
假设我们已经创建了一个名为 student 的表,内容如下 −
+----+---------------+------------------+-----------------------------+-----------------------------+---------+------+ | id | name | email | created_at | updated_at | address | age | +----+---------------+------------------+-----------------------------+-----------------------------+---------+------+ | 1 | Siya Khan | siya@gmail.com | 2022-05-01T13:45:55.000000Z | 2022-05-01T13:45:55.000000Z | Xyz | 20 | | 2 | Rehan Khan | rehan@gmail.com | 2022-05-01T13:49:50.000000Z | 2022-05-01T13:49:50.000000Z | Xyz | 18 | | 3 | Rehan Khan | rehan@gmail.com | NULL | NULL | testing | 20 | | 4 | Rehan | rehan@gmail.com | NULL | NULL | abcd | 15 | | 5 | Nidhi Agarwal | nidhi@gmail.com | NULL | NULL | abcd | 20 | | 6 | Ashvik Khanna | ashvik@gmail.com | NULL | NULL | oooo | 16 | | 7 | Viraj Desai | viraj@gmail.com | NULL | NULL | test | 18 | | 8 | Priya Singh | priya@gmail.com | NULL | NULL | test123 | 20 | +----+---------------+------------------+-----------------------------+-----------------------------+---------+------+ 8 rows in set (0.00 sec)
示例
在 Laravel 中,可以使用"as"关键字创建表的别名。以下是这样做的示例
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { echo $student = Student::from( 'students as std' ) ->orderBy('std.name', 'ASC') ->orderBy('std.email', 'ASC') ->get(); } }
输出
上述代码的输出如下
[{"id":2,"name":"Rehan Khan","email":"rehan@gmail.com","created_at":"2022-05-01T13:49:50.000000Z","updated_at":"2022-05-01T13:49:50.000000Z","address":"Xyz"},{"id":1,"name":"Siya Khan","email":"siya@gmail.com","created_at":"2022-05-01T13:45:55.000000Z","updated_at":"2022-05-01T13:45:55.000000Z","address":"Xyz"}]
示例 1
现在让我们使用 DB Facade 测试别名
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; //use App\Models\Student; use DB; class StudentController extends Controller { public function index() { $users = DB::select('select * from students as std'); print_r($users); } }
输出
Array (
[0] => stdClass Object(
[id] => 1
[name] => Siya Khan
[email] => siya@gmail.com
[created_at] => 2022-05-01 13:45:55
[updated_at] => 2022-05-01 13:45:55
[address] => Xyz
)
[1] => stdClass Object(
[id] => 2
[name] => Rehan Khan
[email] => rehan@gmail.com
[created_at] => 2022-05-01 13:49:50
[updated_at] => 2022-05-01 13:49:50
[address] => Xyz
)
)
示例 2
以下是使用 DB façade 创建表别名的另一种方法 -
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; //use App\Models\Student; use DB; class StudentController extends Controller { public function index() { $users = DB::table('students as std') ->get(array('std.name as std_name')); print_r($users); } }
输出
上述程序的输出是 −
Illuminate\Support\Collection Object (
[items:protected] => Array(
[0] => stdClass Object(
[std_name] => Siya Khan
)
[1] => stdClass Object(
[std_name] => Rehan Khan
)
)
[escapeWhenCastingToString:protected] =>
)

