如何在迁移中向 Laravel 的现有表添加新列?
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>
现在看一下数据库里的表:学生,您应该看到新添加的列,如下所示 −


