如何在 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 )
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP