如何在 Laravel 中从表中获取所有列名?

laravelphpserver side programming更新于 2025/7/4 6:22:17

以下是从 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 类代表数据库中的表。例如,如果您有表"学生",则模型名称为"student",表"用户"为"user",表"员工"为"employee"。表名必须是复数,模型名称必须是单数。这是一种惯例,但这并不妨碍您使用您选择的表名和模型名称的命名约定。

如下所示为"学生"创建模型 -

<?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 外观类 -

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

相关文章