如何在 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,您应该会看到新添加的列,如下所示: