Переименование таблицы, являющейся внешним ключом, в другую таблицу

У меня были таблицы соседей и таблицы школ с полем neighborhood_id.

Когда я увидел, что это было написано с ошибкой, я захотел изменить название на правильную форму.

Сначала я использовал инструмент рефакторинга имени phpStorm и изменил модель на Neighborhood, затем я добавил $ table = ‘соседство’.

Затем я сделал миграцию, чтобы переименовать таблицу, удалил свойство $ table и все работает нормально.

Я думал, что это вызовет ошибку, потому что ограничение внешнего ключа было создано следующим образом:

$table->foreign('neighboorhood_id')->references('id')->on('neighboorhoods')->onDelete('cascade');

И теперь это работает без необходимости обновлять его до:

$table->foreign('neighborhood_id')->references('id')->on('neighborhoods')->onDelete('cascade');

Почему я не должен был изменить ограничение? Я проверил ограничение в базе данных и теперь оно указывает на таблицу окрестностей вместо соседей.

1

Решение

У меня тоже была такая ситуация. Очевидно, InnoDB не использует имя таблицы в качестве ссылки на ограничение: вместо этого он использует некоторую внутреннюю идентификацию (не уверен в отношении других типов базы данных).

Думайте об этом как ID, который остается тем же, когда name таблицы изменений.

Тем не менее документы скажем что-то другое, поэтому было бы неплохо сбросить и создать новый внешний ключ.

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

1

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

Других решений пока нет …

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