我以前的迁移是:
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多个 主键已定义
答案 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();
});