У меня были таблицы соседей и таблицы школ с полем 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');
Почему я не должен был изменить ограничение? Я проверил ограничение в базе данных и теперь оно указывает на таблицу окрестностей вместо соседей.
У меня тоже была такая ситуация. Очевидно, InnoDB не использует имя таблицы в качестве ссылки на ограничение: вместо этого он использует некоторую внутреннюю идентификацию (не уверен в отношении других типов базы данных).
Думайте об этом как ID
, который остается тем же, когда name
таблицы изменений.
Тем не менее документы скажем что-то другое, поэтому было бы неплохо сбросить и создать новый внешний ключ.
Внешние ключи, которые указывают на переименованную таблицу, не обновляются автоматически. В таких случаях вы должны удалить и заново создать внешние ключи для их правильной работы.
Других решений пока нет …