如何在 Laravel 中選擇表中的所有列名?


以下是在 Laravel 中獲取表中列名的幾種方法。

假設我們使用以下查詢在 MySQL 資料庫中建立了一個名為 Students 的表:

CREATE TABLE students(
   id            INTEGER       NOT NULL    PRIMARY KEY,
   name          VARCHAR(10)   NOT NULL,
   email         VARCHAR(15)   NOT NULL,
   created_at    VARCHAR(27)   NOT NULL,
   updated_at    VARCHAR(27)   NOT NULL,
   address       VARCHAR(3)    NOT NULL
);

您可以使用 DESC 命令獲取它的完整詳細資訊:

mysql> desc students; 
+------------+-------------+------+-----+---------+-------+ 
| Field      | Type        | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+ 
| id         | int         | NO   | PRI | NULL    |       | 
| name       | varchar(15) | NO   |     | NULL    |       | 
| email      | varchar(20) | NO   |     | NULL    |       | 
| created_at | varchar(27) | YES  |     | NULL    |       | 
| updated_at | varchar(27) | YES  |     | NULL    |       | 
| address    | varchar(30) | NO   |     | NULL    |       | 
| age        | int         | YES  |     | NULL    |       | 
+------------+-------------+------+-----+---------+-------+ 
7 rows in set (0.08 sec)

使用 Schema 類

使用 Schema 類,您可以在 Laravel 中建立和更新表。要使用 Schema 類,請將以下類新增到您的控制器中。

use Illuminate\Support\Facades\Schema;

示例

這是一個使用 Schema 類的可執行示例:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Schema; class StudentController extends Controller { public function index() { $columns = Schema::getColumnListing('students'); print_r($columns); } }

輸出

以上程式碼的輸出如下所示。

Array(
   [0] => id
   [1] => name
   [2] => email
   [3] => created_at
   [4] => updated_at
   [5] => address
)

使用 Model 類

Laravel 中的 Model 類代表資料庫中的表。例如,如果您有 students 表,則模型名稱將為 student;對於 users 表,則為 user;對於 employees 表,則為 employee。表名通常是複數,模型名通常是單數。這是一個常用的模式,但這並不會阻止您使用您選擇的表名和模型名的命名約定。

如下所示建立 student 模型:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Student extends Model { use HasFactory; protected $fillable = ['name','email','address']; }

現在在您的控制器中使用該模型來獲取列名:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::first(); $table_columns = array_keys(json_decode($student, true)); print_r($table_columns); } }

輸出

以上程式碼的輸出是。

Array(
   [0] => id
   [1] => name
   [2] => email
   [3] => created_at
   [4] => updated_at
   [5] => address
)

示例

您也可以在控制器中使用 DB facade 類,如下所示:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; class StudentController extends Controller { public function index() { $table = DB::table('students')->get(); $cols = array_keys(json_decode(json_encode($table[0]), true)); print_r($cols); } }

輸出

以上程式碼的輸出是:

Array ( 
   [0] => id 
   [1] => name 
   [2] => email 
   [3] => created_at 
   [4] => updated_at 
   [5] => address
)

示例

另一種使用 DB facade 獲取列的方法是:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; class StudentController extends Controller { public function index() { $columns_names = []; $tableDet = DB::select("SHOW COLUMNS FROM students"); foreach($tableDet as $column) { $columns_names[$column->Field] = ''; } print_r($columns_names); } }

輸出

以上程式碼的輸出是。

Array ( 
   [id] => 
   [name] => 
   [email] => 
   [created_at] => 
   [updated_at] => 
   [address] => 
)

更新於:2022年8月29日

4K+ 次檢視

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告