外部キー制約を付けるときのマイグレーションで気をつけること

要約

外部キー制約を設定するときは外部キーにunsigned制約を付ける。

外部キーと対象のプライマリーキーが完全に同じ型である必要があって、プライマリーキーには自動的にunsignedがかかっているから。

エラー内容

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

constraintは制約の意味。sql的に一般的にエラーだよと言っている

migration file

例えば下記のようにしておく。

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

修正が面倒なのでもう間違えたくない。

外部キー制約の付与に失敗しているがテーブルは作られている。

なので修正してmigrateすると「もうテーブルあるよ」のエラーがでる。

resetとかしてもこのrollbackだけ効かなかったりして面倒だが直接テーブルを削除することでやり直した。