如何在 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,您應該會看到新新增的列,如下所示:

更新於: 2022-08-29

13K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告