如何在 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+ 次查看

启动您的 职业生涯

完成课程获得认证

开始学习
广告