如何在 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+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告