如何在 Laravel 中獲取非主鍵列欄位的唯一值?


以下是一些在 Laravel 中獲取非主鍵列欄位唯一值的不同方法。假設我們已經使用以下查詢建立了一個名為 students 的表:

CREATE TABLE students( 
   id          INTEGER        NOT NULL      PRIMARY KEY, 
   name        VARCHAR(15)    NOT NULL, 
   mail        VARCHAR(20)    NOT NULL, 
   created_at  VARCHAR(27), 
   updated_at  VARCHAR(27), 
   address     VARCHAR(30)    NOT NULL 
);

並按如下所示填充它:

+----+---------------+------------------+-----------------------------+-----------------------------+---------+ 
| id |          name |            email |           created_at        |       updated_at            | address | 
| 1  | Siya  Khan    | siya@gmail.com   | 2022-05-01T13:45:55.000000Z | 2022-05-01T13:45:55.000000Z | Xyz     | 
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01T13:49:50.000000Z | 2022-05-01T13:49:50.000000Z | Xyz     | 
| 3  | Rehan Khan    | rehan@gmail.com  |           NULL              | NULL                        | testing | 
| 4  | Rehan         | rehan@gmail.com  |           NULL              | NULL                        | abcd    |
+----+---------------+------------------+-----------------------------+-----------------------------+---------+

使用模型 Eloquent

Eloquent 是一個新的物件關係對映器 (ORM),它有助於與資料庫互動。使用 Eloquent,每個表都具有一個對映模型,負責該表上的所有操作。

在 Laravel 中,模型代表資料庫中的表。例如,如果您有表 customers,模型名稱將為 customer;對於 users,將為 user;對於 employees,將為 employee。表名必須是複數,模型名必須是單數。這是一個遵循的模式,但這並不會阻止您使用您選擇的表名和模型名的命名約定。

示例

在您的控制器中使用 student 模型,如下例所示:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::select('name')->distinct()->get()->toArray(); print_r($student); } }

在上面的示例中,distinct() 方法用於從“students”表中獲取唯一值。

輸出

上述查詢的輸出如下所示:

Array(
   [0] => Array(
      [name] => Siya Khan
   )
   [1] => Array(
      [name] => Rehan Khan
   )
   [2] => Array(
      [name] => Rehan
   )
)

使用 distinct() 函式

distinct() 方法將返回表中的唯一值。其 SQL 查詢如下:

SELECT distinct name from students;

您也可以在模型 Eloquent 上使用 distinct() 方法,如下所示:

示例

namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::distinct()->get(['name'])->toArray(); print_r($student); } }

輸出

以上程式碼的輸出為:

Array(
   [0] => Array(
      [name] => Rehan
   )
   [1] => Array(
      [name] => Rehan Khan
   )
   [2] => Array(
      [name] => Siya Khan
   )
)

使用 groupby() 方法

groupby() 方法有助於根據給定的欄位名稱對值進行分組。使用 groupby 的語法如下:

odel::select('fieldname')->groupBy('fieldname')

SQL 查詢如下:

SELECT name FROM students GROUP BY name;

示例

您也可以使用 groupby() 方法,如下所示:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::select('name')->groupBy('name')->get()->toArray(); print_r($student); } }

輸出

以上程式碼的輸出為:

Array ( 
   [0] => Array ( 
      [name] => Rehan 
   )
   [1] => Array ( 
      [name] => Rehan Khan 
   )
   [2] => Array ( 
      [name] => Siya Khan 
   )

使用 unique() 方法

unique() 方法將返回表中存在的唯一值。使用 unique() 方法的語法如下:

Model::all()->unique('fieldname')

示例

如下例所示使用 unique() 方法:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::all()->unique('name')->toArray(); print_r($student); } }

輸出

以上程式碼的輸出如下:

Array(
   [0] => Array(
      [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] => Array(
      [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
   )

   [3] => Array(
      [id] => 4
      [name] => Rehan
      [email] => rehan@gmail.com
      [created_at] =>
      [updated_at] =>
      [address] => abcd
   )
)

示例

使用 DB Facade

讓我們在控制器中使用 DB Facade,如下所示。我們將使用 distinct() 方法從 students 表中獲取唯一名稱。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; class StudentController extends Controller{ public function index() { $stdDetails = DB::table('students')->distinct()->get(['name'])->toArray(); print_r($stdDetails); } }

輸出

以上程式碼的輸出為:

Array ( 
   [0] => stdClass Object ( 
      [name] => Siya Khan 
   )
   [1] => stdClass Object( 
      [name] => Rehan Khan 
   )
   [2] => stdClass Object ( 
      [name] => Rehan 
   )
)

示例

在 students 表上使用 groupBy() 方法。示例如下:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; class StudentController extends Controller{ public function index() { $stdDetails = DB::table('students')->select('name')->groupBy('name')->get()->pluck('name')->all(); print_r($stdDetails); } }

輸出

以上程式碼的輸出如下

Array(
   [0] => Rehan
   [1] => Rehan Khan
   [2] => Siya Khan
)

更新於:2022年8月29日

8K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.