私の外部キーはその自分のテーブルに関連しています。これは階層のある投稿を生成することでした。
データベースに列をドロップしようとすると、次のエラーが発生します。
1553 - Cannot drop index 'post_field_properties_parent_id_index': needed in a foreign key constraint
これはコードです:
public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('parent_id');
$table->dropColumn('parent_id');
} );
}
私がそれを行うことができると思われる唯一の方法は、phpmyadminに移動して外部キー自体を削除することです。次に、列をドロップします。
私自身のプロジェクトのためにこれを理解しました。外部キーを削除する場合は、制約内のテーブル名と列を連結してから、名前の末尾に「_foreign」を付ける必要があります。
http://laravel.com/docs/5.1/migrations#foreign-key-constraints
public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('post_field_properties_parent_id_foreign');
$table->dropColumn('parent_id');
});
}
方法は次のとおりです。
1)データベースにログインし、外部キー関係の名前を検索します。 phpmyadminを使用している場合は、テーブルに移動し、[構造]タブをクリックし、[リレーションビュー]リンクをクリックして、読み込まれるまで数秒待ちます。 「制約名」フィールドを検索します。私の例では、これは「contribution_copyright_id_foreign」です。
2)Laravel移行スクリプトに移動します(またはスクリプトを作成します)。トリックは、最初に外部キーの関係を削除してから、列を削除することです。
public function down()
{
Schema::table('contribution', function(Blueprint $table){
$table->dropForeign('contribution_copyright_id_foreign');
$table->dropColumn('copyright_id');
});
外部キーが存在するテーブルを削除する場合は、最初に外部キーの関係も削除する必要があります。
ここ からコピー
それが誰かを助けることを願っています
列名の最後に「_foreign」を配置してみてください。例えば:
public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('parent_id_foreign');
$table->dropColumn('parent_id');
});
}
外部キーの名前を確認するには、最初にデータベースを.sqlにバックアップします
そこにあなたはこのようなあなたの外部キーの名前を見るでしょう:
...
KEY `employees_parent_id_foreign` (`parent_id`),
CONSTRAINT `employees_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `laravel_article` (`id`) ON DELETE CASCADE
...
私の場合はlaravel 5.4で、次の形式で始まります:tablename_columnname_foreign
だからあなたのlaravel(ここでは従業員テーブルから外部キーを削除しようとしています)
Schema::table("employees", function( $table )
{
$table->dropForeign('employees_parent_id_foreign');
$table->dropColumn('parent_id');
});