如何使用查詢構建器在 Laravel Eloquent 查詢中給表賦別名?


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 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::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] =>
)

更新於: 2022-08-29

9K+ 次瀏覽

開啟你的 事業

完成課程即可獲得認證

開始
廣告
© . All rights reserved.