2016-12-05 4 views
1

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

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

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

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

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

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

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

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

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

ответ

1

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

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

Однако, docs говорят что-то другое, поэтому отбрасывание и создание нового внешнего ключа определенно будет хорошим делом.

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