如何在迁移中向 Laravel 的现有表添加新列?

laravelphpserver side programming更新于 2025/4/30 3:22:17

Laravel (9) 中的 make:migration Artisan 使您能够生成数据库迁移。您可以在 database/migrations 目录中找到生成的迁移文件。使用此命令,我们可以向表中添加新列(除了其他操作)。

语法

首先,让我们先使用 make:migration 命令创建一个表。以下是使用此命令在 Laravel 中创建新表的语法 -

php artisan make:migration create_yourtablename_table

这里,表名为 your_table_name。因此,让我们创建一个名称:学生的表格。

创建表格 学生的命令 如下

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 和时间戳,您可以根据需要添加更多字段。

让我们将 name 和 email 字段添加到 up() 方法,如下所示 -

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() 方法中添加要删除的地址列。如果再次执行迁移命令,这将非常有用。

public function down() {
   Schema::table('students', function (Blueprint $table) {
      $table->dropColumn('address');
   });
}

现在,让我们运行 PHP artisan migration 来对表: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>

现在看一下数据库里的表:学生,您应该看到新添加的列,如下所示 −


相关文章