将新的自动增量列添加到现有表

时间:2018-08-10 11:32:55

标签: laravel

我以前的迁移是:

Schema::create('item_tag', function (Blueprint $table) {

    $table->integer('item_id')->unsigned()->index();
    $table->foreign('item_id')->references('id')->on('items')->onDelete('cascade');

    $table->integer('tag_id')->unsigned()->index();
    $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');

    $table->primary(['item_id', 'tag_id']);

});

现在我要为此添加新的自动增量列并删除旧的主键

我尝试:

Schema::table('item_tag', function (Blueprint $table) {

    $table->unsignedInteger('id', true)->first();

    $table->dropPrimary();
    $table->primary('id');

});

但是在迁移后会出现错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1068多个   主键已定义

1 个答案:

答案 0 :(得分:3)

将主键拖放到单独的迁移中,然后删除$table->primary('id')。添加AUTO_INCREMENT列会自动创建一个主键:

Schema::table('item_tag', function (Blueprint $table) {   
    $table->dropPrimary();
});

Schema::table('item_tag', function (Blueprint $table) {
    $table->unsignedInteger('id', true)->first();
});

您还可以简化第二次迁移:

Schema::table('item_tag', function (Blueprint $table) {
    $table->increments('id')->first();
});