外部キー制約を付けるときのマイグレーションで気をつけること
要約
外部キー制約を設定するときは外部キーに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だけ効かなかったりして面倒だが直接テーブルを削除することでやり直した。