【Laravel】マイグレーションで外部キーを設定する場合の注意事項
マイグレーションでよく失敗する、
- カラムの型問題
- マイグレーションファイルの実行順問題
についてまとめておきます。
カラムの型問題
外部キーを設定する場合は、参照先のカラムと同じ型にする必要があります。
一般に、プライマリーキーには以下のようにincrementsを指定しますが、これは自動的にunsigned int型のカラムを生成します。
migrationファイル
$table->increments('id');
よって、外部キーを設定する際にもunsigned型を指定する必要があります。
※以下のどちらでも可。
migrationファイル
//方法1
$table->integer('user_id')->unsigned()
//方法2
$table->unsignedInteger('user_id');
//共通
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade'); //親テーブルで行削除された場合、子テーブルの対応する行も削除する
マイグレーションファイルの実行順問題
外部キー参照先のマイグレーションファイルが実行されていない状態で、外部キーを設定したマイグレーションファイルが実行されると、参照するテーブルがないとエラーを返される。
SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'medium_id' doesn't exist in table (SQL: alter table `teaching_materials` add constraint `teaching_materials_medium_id_foreign` foreign key (`medium_id`) references `media` (`id`))
マイグレーションはファイルを作成した順(ファイル名になっている作成日時順)に実行される。
例えば、postsテーブルの外部キー参照先にusersテーブルを設定したい場合は、usersマイグレーションの作成後にpostsのマイグレーションファイルを作成し、マイグレーションを実行する。
Author And Source
この問題について(【Laravel】マイグレーションで外部キーを設定する場合の注意事項), 我々は、より多くの情報をここで見つけました https://qiita.com/hinako_n/items/4b29effd01361d0cbc93著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .