php 如何使用laravel 5迁移在表中添加列而不丢失其数据?

b5buobof  于 2023-05-12  发布在  PHP
关注(0)|答案(3)|浏览(92)

我有一个现有的数据库表,我想在它上面添加列。但是,当我运行php artisan migrate命令时,它没有说明要迁移什么。但是我已经添加了一个用于添加表列的Schema。我读过一些文章和链接,我应该在添加新列之前先运行php artisan migrate:refresh。问题是,它会删除表中现有的数据。是否有任何方法可以执行迁移并成功地在表中添加列而不删除数据?请帮我一下。多谢了。这是我的迁移代码。

public function up()
{
    //
    Schema::create('purchase_orders', function(Blueprint $table){

        $table->increments('id');
        $table->string('po_code');
        $table->text('purchase_orders');
        $table->float('freight_charge');
        $table->float('overall_total');
        $table->timestamps();

    });

    Schema::table('purchase_orders', function(Blueprint $table){
        $table->string('shipped_via');
        $table->string('terms');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //
    Schema::drop('purchase_orders');
}

我想在purchase_orders表中添加列shipped_viaterms

yhxst69z

yhxst69z1#

使用以下命令修改现有表

php artisan make:migration add_shipped_via_and_terms_colums_to_purchase_orders_table --table=purchase_orders

使用--create创建新表,使用--table修改现有表。
现在将创建一个新的迁移文件。在此文件的up()函数中添加以下行

Schema::table('purchase_orders', function(Blueprint $table){
    $table->string('shipped_via');
    $table->string('terms');
});

然后运行php artisan migrate

rjzwgtxy

rjzwgtxy2#

Laravel在你的数据库中有一个表,它可以跟踪所有已经执行的迁移。因此,仅通过更改迁移文件,Laravel不会自动为您重新运行该迁移。因为迁移已经被Laravel执行了。
因此,最好的做法是创建一个新的迁移,并将您已经拥有的代码段放入其中(您走对了路!).

public function up()
{
    //
    Schema::table('purchase_orders', function(Blueprint $table){
        $table->string('shipped_via');
        $table->string('terms');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //

}

如果当前的purchase_orders迁移将删除表,则不需要填充down函数。
要迁移新迁移,只需运行:

php artisan migrate
qcuzuvrc

qcuzuvrc3#

To add columns on Database table, you need to add

    php artisan make:migration add_column_name_on_table_name_table --table=table_name

In your case,

    php artisan make:migration add_shipped_via_on_purchase_orders --table=purchase_orders

After that run the command:

    php artisan migrate

现在,您将获得新的迁移文件,您可以在迁移文件中添加列。

public function up()
{
    //
    Schema::table('purchase_orders', function(Blueprint $table){
        $table->string('shipped_via');
        $table->string('terms');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    $table->dropColumn('shipped_via');
    $table->dropColumn('terms');

}

相关问题