如何在 Laravel 的遷移中向現有的表新增新列?
Laravel (9) 中的 **make:migration Artisan** 允許您生成資料庫遷移。您可以找到生成的遷移檔案位於 database/migrations 目錄中。使用此命令,我們可以向表新增新列(以及其他操作)。
語法
首先,讓我們使用 **make:migration** 命令建立一個表。以下是使用此命令在 Laravel 中建立新表的語法:
php artisan make:migration create_yourtablename_table
這裡,表名為 **your_table_name**。所以讓我們建立一個名為 students 的表。
建立表 students 的命令如下:
php artisan make:migration create_students_table C:\xampp\htdocs\laraveltest>php artisan make:migration create_students_table Created Migration: 2022_05_01_055549_create_students_table C:\xampp\htdocs\laraveltest>
現在,如果您觀察 **database/migrations** 內部,您可以觀察到為 **students** 建立了一個自動生成的類,如下所示:
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateStudentsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('students', function (Blueprint $table) { $table->id(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('students'); } }
該類包含兩個方法 **up()** 和 **down()**。**up()** 負責儲存名為 **students** 的表的架構。預設情況下,會建立 id 和時間戳,您可以根據需要新增更多欄位。
讓我們向 **up()** 方法新增 **name** 和 **email** 欄位,如下所示:
public function up() { Schema::create('students', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->timestamps(); }); }
現在,要建立資料庫中的 **table:students**,我們需要執行以下命令:
php artisan migrate C:\xampp\htdocs\laraveltest>php artisan migrate Migrating: 2022_05_01_055549_create_students_table Migrated: 2022_05_01_055549_create_students_table (21.14ms) C:\xampp\htdocs\laraveltest>
命令成功後,您應該能夠在 MySQL 中看到建立的表,如下所示:
向現有表新增新列
現在,名為“**students**”的表已建立,讓我們向該表新增一列。這裡我們新增一個名為 **address** 的新列。執行此操作的命令如下:
php artisan make:migration add_address_to_students --table="students" C:\xampp\htdocs\laraveltest>php artisan make:migration add_address_to_students --table="students" Created Migration: 2022_05_01_061430_add_address_to_students C:\xampp\htdocs\laraveltest>
現在,如果您檢查 **database/migrations** 內部的檔案。自動生成的檔案內容如下所示:
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddAddressToStudents extends Migration { /** * Run the migrations. * @return void */ public function up() { Schema::table('students', function (Blueprint $table) { }); } /** * Reverse the migrations. * @return void */ public function down() { Schema::table('students', function (Blueprint $table) { // }); } }
在 **up()** 方法中,您可以新增新的列,如下所示:
public function up() { Schema::table('students', function (Blueprint $table) { $table->text('address'); }); }
還有一個 **down()** 方法,負責刪除新建立的列。因此,在 **down()** 方法中新增要刪除的 address 列。如果再次執行遷移命令,這將很有用。
public function down() { Schema::table('students', function (Blueprint $table) { $table->dropColumn('address'); }); }
現在,讓我們執行 PHP artisan migrate 以對 table:students 進行更改。命令如下:
php artisan migrate C:\xampp\htdocs\laraveltest>php artisan migrate Migrating: 2022_05_01_061430_add_address_to_students Migrated: 2022_05_01_061430_add_address_to_students (21.51ms) C:\xampp\htdocs\laraveltest>
現在檢視資料庫中的 table:students,您應該會看到新新增的列,如下所示: