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

时间:2016-04-19 12:43:26

标签: php postgresql migration laravel-5.2

我有一个现有的数据库表,我想在其上添加列。但是,当我运行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');
}

我想在shipped_via表格中添加列termspurchase_orders

2 个答案:

答案 0 :(得分:33)

使用以下命令修改现有表

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

答案 1 :(得分:4)

Laravel在您的数据库中有一个表,用于跟踪已执行的所有迁移。因此,只需更改迁移文件,Laravel就不会自动为您重新运行该迁移。因为Laravel已经执行了迁移。

所以最好的办法就是创建一个新的迁移并将你已经拥有的代码放入其中(你在正确的轨道上!)。

table {
  border-bottom: 1px solid black;
  border-spacing: 0;
  background-color: #bcf;
  width: 100%;
}

table > tr, table > tr > td {
  padding: 0;
  margin: 0;
  border: 0;
  border-spacing: 0;
}

.lefttd {
  height: 100%;
  vertical-align: middle;
}

.righttd {
  width: 95%;
  height: 32px;
  text-align: right;
  font-size: 22px;
  line-height: 30px;
  vertical-align: middle;
}

a.mmenu {
  border: 0;
  text-decoration: none;
  background-color: #aaa;
  height: 100%;
  vertical-align: middle;
  display: inline-block;
}

img {
  width: 32px;
  border: 0;
  text-decoration: none;
  vertical-align: middle;
}

您不需要填充羽绒功能案例,您的当前purchase_orders迁移会删除该表格。

要迁移新迁移,请运行:

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()
{
    //

}