MySQLの外部キー制約を追加する際にエラーが出ました。
General error: 1215 Cannot add foreign key constraint
解決するのに30分程度も使ってしまったので、、、、対処方法をここにまとめます。
(環境:PHP8.0/Laravel/MySQL)
確認①:型の不一致
データ型があっていないと、同様のエラーが出ます。
- idの片側にunsignedがついている
- smaillintとtinyintをつなげようとしている
データ型を合わせるために、外部キーに指定するidを修正してみましょう。
確認②:Migrationファイルの順番は正しいか
今回のエラーの原因はこちらでした。
Laravelでは、CREATE TABLEを使わずにPHPで定義されたファイルを作成・実行して、MySQLにテーブルを作ります。
このとき、CREATE TABLEされる実行順は、日付の古い順になります。まだ生成されていないテーブルにリレーションを貼ろうとするとエラーになってしまうんです、、。
今回は解決方法として、ファイル名を変更(YYYY_MM_DD)して、順番を整理しました。
php artisan migrate:fresh
で、問題なく通りました。
まとめ
General error: 1215 Cannot add foreign key constraint
今回のエラーが起きたら確認すること。
- データ型はあっているか
- migrationファイルの順番は正しいか
この記事が、誰かのエラー解消の時間削減につながれば幸いです...。