ネビ活 | ネットビジネス生活

ネットxお金のスキルを作り、未来永劫豊かに暮らす事を目指すサイト

laravelでforeign_key追加でmigrationエラーになる場合の対処法。

投稿日:

laravelですでに作成済みのテーブルに対して、マイグレーションファイルを使って、foreign_key(外部キー)を追加しようと試みた際、以下のようなエラーが出てハマってませんか?

 

Migrating: 2020_11_20_110730_add_foreign_to_forms_table

Illuminate\Database\QueryException : SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`newsite`.`#sql-594_584`, CONSTRAINT `forms_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) (SQL: alter table `forms` add constraint `forms_user_id_foreign` foreign key (`user_id`) references `users` (`id`))

子の行は挿入、更新はできない。外部キー作成に失敗。

なんのこっちゃという感じでハマってしまいますが、実はすごく単純な事でエラーは消えます。

 

laravelでforeign_key追加でmigrationエラーになる場合の対処法。

まず、仮に下図のように、既存のテーブルに、user_idカラムとforeign_keyを作成して、マイグレーションしたとします。

LaravelのMigrationでカラムを追加、編集、削除のやり方。初心者でもよく分かるように解説!

 

で、これだとエラーが出るわけですが、

上のエラーが出た場合、カラム自体はエラーが出ても作成されてしまってます。

 

なので、phpMyAdminにログインし、作られてしまったuser_idカラムを手動で削除しましょう。

 

削除しないと、もう一度マイグレーションした時に、今度は、

Illuminate\Database\QueryException : SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'user_id' (SQL: alter table `forms` add `user_id` bigint unsigned not null)

すでにuser_idカラムは存在するから、追加できないよ!と怒られます。(いや、お前がエラーと言いつつ勝手に作ったんだろ!って感じですが)

 

というわけで、カラム削除をしたら、失敗したマイグレーションファイルをテキストエディタで開きます。

先程のカラム追加用のコードに、->nullable()を追記して、上書き保存してください。

結局、nullableじゃないから、追記できないというエラーが出るんです。

 

これで再度、php artisan migrate してみてください。これでうまく行くはずです。

 

Laravelって稼げるの?独学?スクール?高給を稼ぐためにどうするべきか教えます。

それでもエラーが出る場合は?

よくあるのは、元のテーブルがbigIntegerなのに、bigIntegerを使わないで、integerを使ってるパターンです。

例えば、usersテーブルを作成したマイグレーションファイルを開いてみると、
bigIncrementsが指定されています。

 

phpMyAdminから見ると、bigintとなってますね。

 

つまり、foreign_keyを作る時も、integerではなく、bigIntegerを指定しないとエラーになります。

 

必ず、foreign_keyを作る時は、元のidが integerなのか、bigIntegerなのかをチェックして、そろえるようにする事でエラーを回避できます。

 

ところで、あなたはなぜLaravelを今学び始めたんですか?

稼げると聞いたから?

じゃあ、どれくらい上達すれば稼げるのか?

本当にそんな高給を稼げるのかの現実を知ってますか?

詳しくは下の記事に本音の裏事情を書いてるので参考にしてくださいね。

Laravelって稼げるの?独学?スクール?高給を稼ぐためにどうするべきか教えます。

  • この記事を書いた人

Neby

本を毎日多読しつつ、資産運用、プログラミング、心理学、ネットビジネススキルを猛向上中。貧富の差が広がる5年後、10年後に安心生活を送るためのお金のリテラシー、スキル、資産を一緒に作っていきましょう。

-PHP Laravel入門

Copyright© ネビ活 | ネットビジネス生活 , 2020 All Rights Reserved.