(Laravel) マイグレーション時、SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint のエラー

laravel-migration-foreign-key-constraint

 

laravelで、
マイグレーションしたら下記のようなエラー

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

 

今回エラーになったのは、
カラム’user_id’に、親テーブルの’id’をキーとする外部制約を付与しようとしたケース

 

原因:親子でカラムの型が一致していなかったから

色々調べてみるとよくあるエラーの原因として、
外部制約を与えようとするカラムのデータ型が、親となるカラムのデータ型と異なるから、
と言うのが多くあるらしい。

今回は、
use_idのカラムが、親テーブルのカラムidが下記点で違っていた。

 

■カラム’use_id’の属性にunsigendがついていない

親カラム’id’には属性に「UNSIGNED」がついているのに、’use_id’につけ忘れていた。

 

 

解決策:親とデータ型を揃える

なのでmigrationファイルで以下のように下記加えた

public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            //==========省略==========
            $table->bigInteger('user_id')->unsigned(); #unsigned()まで一緒にしないとだめ!
            //==========省略==========
            $table->timestamps();
        });
    }

 

上記の様に、
「->unsigned()」と言う記述を記述することで、親とデータ型を揃える。
そしたら無事マイグレーション できた。

 

他にもよくありがちなのが、integerとBigIntegerの違いだったりするようだ。

 

後はid()と、autoincrement(‘id’)の違いも確かめてないけどダメだったりするのかな?

 

https://readouble.com/laravel/8.x/ja/migrations.html

 

 

Laravel 関連記事

(Laravel) ルーティングを基礎から理解する
(Laravel) ビューの役割・使い方を解説
(Laravel) bladeのディレクティブの使い方を解説
(Laravel) bladeのレイアウトの使い方
(Laravel) コンポーネントとサブビューの違い
(Laravel) ビューコンポーザの使い方
(Laravel) ミドルウェアの使い方を解説
laravel-validation
laravel-validation-outof-controller
(Laravel) DBクラスとクエリビルダの違い・使い方
(Laravel) マイグレーション実施手順
(Laravel) シーディングの 実行手順
(Laravel) Eloquentの使い方を解説
laravel-somtimes-validation
(Laravel) migrationやり直しコマンドあれこれ

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。