проблема с удалением внешнего ключа

Мой внешний ключ относится к его собственный стол. Это должно было произвести посты с иерархией.

Теперь, когда я пытаюсь удалить столбец в базе данных, это дает мне эту ошибку:

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 и удалить сам внешний ключ. а затем опустите столбец.

7

Решение

Просто понял это для моего собственного проекта. Когда вы отбрасываете внешний ключ, вам нужно объединить имя таблицы и столбцы в ограничении, а затем добавить суффикс имени к _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');
});
}
15

Другие решения

Попробуйте поместить «_foreign» в конце имени столбца. Например:

public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('parent_id_foreign');
$table->dropColumn('parent_id');
});
}
1

Чтобы проверить имя внешнего ключа, сначала сделайте резервную копию вашей базы данных в .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');
});
0

Вот как это сделать:

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');

});

Если вы хотите удалить таблицу, в которой присутствует внешний ключ, вы также должны сначала удалить связь с внешним ключом.

скопировано с Вот

Надеюсь, это поможет кому-то

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector