2016-12-05 18 views
1

私はテーブルneighboorhoodsを持っていて、テーブルschoolは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が変更されたときに同じままであるIDと考えてください。

しかし、docsは何か異なると言えるので、新しい外部キーを削除して作成することは間違いなく良いことです。

名前が変更されたテーブルを指す外部キーは自動的に更新されません。このような場合は、外部キーを適切に機能させるために外部キーを削除して再作成する必要があります。

関連する問題