如何在不丢失 laravel 中的数据的情况下向现有迁移 table 添加额外的列?

How to add extra columns to an existing migration table without lossing data in laravel?

我有一个迁移 table 负责存储详细信息,在我的数据库中它包含一些数据,现在我想在我现有的 table 中添加一些两列而不丢失任何数据我的数据库(这些应该反映在我的数据库中也不会影响我数据库中的任何数据)。我想在我现有的 table 中添加这些列 $table->string('country'); $table->string('station'); 如何实现这个东西,请指导我添加我现有的列 table..

migration table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreateBlogsTable extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('passport_table', function (Blueprint $table) {
            
            $table->id();
            $table->string('name');
            $table->string('price');
            $table->integer('rating');
            $table->longText('image');
            $table->unsignedInteger('user_id');
            $table->foreign('user_id')->references('id')->on('user_table');
            $table->timestamps();
            //$table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('passport_table');
    }
}

您创建一个新迁移 php artisan make:migration add_extra_fields_passport_table,迁移应该如下所示。

public function up(): void
{
    Schema::table('passport_table', function (Blueprint $table) {
        $table->string('country')->after('image');
        $table->string('station')->after('country'); 
    });
}

public function down(): void
{
    Schema::table('passport_table', function (Blueprint $table) {
        $table->dropColumn('country');
        $table->dropColumn('station');
    });
}

您使用迁移来确保所有数据库同步、本地、暂存、生产等。如果您重写迁移,如果已执行某些迁移,它们将不会同步。我使用 after() 方法,以确保在 image 列之后的 table 中正确放置。

如果您只是在本地单独开发并且没有发布任何内容,您可以更改原始迁移。然后,您必须在迁移 table 中删除与您的文件相对应的迁移行,并清理您的 table 结构以避免重新运行迁移时出错。或者,可以回滚迁移,这是另一种方法。然后你可以 运行 php artisan migrate 并且它会再次重新运行 相同的代码。但建议只创建一个新的迁移,这样更容易。