在Laravel 5.1

时间:2015-11-08 08:18:59

标签: php mysql laravel-5.1 rollback migrate

我是Laravel的初学者。我使用migrate在数据库中创建表,但我不想migrate:rollback更新我的表。

我想在旧数据库中应用更改而不会丢失当前数据。

旧迁移

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->rememberToken();
        $table->timestamps();
    });
}

新迁移

   public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('family');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->rememberToken();
        $table->timestamps();
    });
}

2 个答案:

答案 0 :(得分:6)

据我所知,这是不可能的,也不是迁移的意图。我认为有两种方法可以解决这个问题:

  1. 如果您尚未投入使用,则可以使用mysql手动更改迁移脚本并添加其他列:

    alter table users add column family varchar(255);
    
  2. 如果您需要更新高效数据库,则应添加第二个迁移脚本,仅添加其他列,例如:

    public function up()
    {
        Schema::table('users', function(Blueprint $table)
        {
            $table->string('family')->after('user_id');
        });
    }
    
    public function down()
    {
        Schema::table('users', function(Blueprint $table)
        {
            $table->dropColumn('family');
        });
    }
    

答案 1 :(得分:1)

是的,在这种情况下,您可以通过运行新的迁移文件来做到这一点

php artisan migrate:make add_family_to_users

这样,将创建一个新的迁移文件,您可以将family列与属性一起添加到其中。关于位置,您可以使用

->之后(“列名”)

指定新创建的列将在何处。例如,在您的情况下,它看起来类似于此

Schema::table('users', function (Blueprint $table) 
{
        $table->string('family')->after('name');
});

最后,重新运行php artisan migrate并检查表中是否已添加该列。