2017-06-09 45 views
2

に移行を使用して、データベースの主キーと自動インクリメントを削除し、私は新しい移行が主キー索引をドロップするように作っても自動インクリメントフィールドを削除します。どのように私はこれを達成することができます。私は、主キーと自動インクリメントフィールドを持つテーブルがあるlaravel

私はそれは[Illuminate\Database\QueryException]
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'message _id' (SQL: alter table tbl_'message_read_state' add 'message_id' int unsigned not null)

いただきました間違ったように、コマンドに私にエラーを与えた

public function up() 
{ 
    Schema::table('tbl_message_read_state', function (Blueprint $table) { 

    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('tbl_message_read_state', function (Blueprint $table) { 

     $table->dropPrimary('message_id'); 
     $table->unsignedInteger('message_id'); 
    }); 
} 

として新しい移行を作成?????

答えて

2

ドロップ主キー:。

$table->dropPrimary('id'); 

Reference

+0

何職人コマンドになりますか? – JohnB

3

あなたはこの

$table->dropPrimary('id_primary'); 
6

青写真クラスを使用すると、主キーを削除することができdropPrimary方法を提供しています試すことができます

public function down() 
{ 
    Schema::table('table', function (Blueprint $table) { 
     $table->dropPrimary(); 
     $table->unsignedInteger('id'); // for removing auto increment 

    }); 
} 
+0

職人の司令官は何ですか?私はそれが 'php artisan make:migration drop_primary_from_tablename --table = tablename'と思っています。そうですか? – JohnB

+0

それは私のために働かなかった。 – JohnB

0

dropPrimary方法のみ主キーではない列を除去する簡単なドロップカラム

$table->dropColumn('id');

1

を使用します。

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('tbl_message_read_state', function (Blueprint $table) { 

     $table->dropPrimary('message_id'); 
     $table->dropColumn('message_id'); 
     $table->unsignedInteger('message_id'); 
    }); 
} 

またはその代わりをドロップして再作成する列を、あなたは5

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('tbl_message_read_state', function (Blueprint $table) { 

     $table->dropPrimary('message_id'); 
     $table->integer('message_id')->unsigned()->change(); 
    }); 
} 
関連する問題