Мой внешний ключ относится к его собственный стол. Это должно было произвести посты с иерархией.
Теперь, когда я пытаюсь удалить столбец в базе данных, это дает мне эту ошибку:
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');
});
}
Попробуйте поместить «_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
так что в вашем ключе (здесь я пытаюсь удалить внешний ключ из таблицы сотрудников)
Schema::table("employees", function( $table )
{
$table->dropForeign('employees_parent_id_foreign');
$table->dropColumn('parent_id');
});
Вот как это сделать:
1) Войдите в свою базу данных и найдите имя отношения внешнего ключа. Если вы используете phpmyadmin, перейдите к таблице, перейдите на вкладку «Структура», нажмите на ссылку «Просмотр отношений» и подождите несколько секунд, пока она загрузится. Ищите поле «Имя ограничения». В моем примере это так: «contrib_copyright_id_foreign»
2) Перейдите к сценарию миграции Laravel (или создайте его). Хитрость заключается в том, чтобы сначала удалить отношение внешнего ключа, а затем удалить столбец.
public function down()
{
Schema::table('contribution', function(Blueprint $table){
$table->dropForeign('contribution_copyright_id_foreign');
$table->dropColumn('copyright_id');
});
Если вы хотите удалить таблицу, в которой присутствует внешний ключ, вы также должны сначала удалить связь с внешним ключом.
скопировано с Вот
Надеюсь, это поможет кому-то