ホーム » マイグレーションの利用方法について(外部キー制約)

マイグレーションの利用方法について(外部キー制約)

外部キー制約(参照整合性制約)の制御について

外部キー制約(参照整合性制約)の制御方法についてです。
※Udemyの(【Laravel】データーベース操作「Eloquent・クエリビルダー」マスターコース)の補足になります。

// ■外部キーを追加する場合(up)
// 規約通りの場合はこれでOK。usersテーブルのidをgamesのuser_idとして外部キーとする。
// user_idカラムが存在しない場合は、カラムも作成してくれる。
$table->foreignId('user_id')->constrained(); 

// 規約外の場合
$table->foreignId('user_id')->constrained('users_detail');

// 更新をカスケードします。(usersテーブルのidが更新された場合に、gamesテーブルのuser_idも更新される)
$table->foreignId('user_id')->constrained()->cascadeOnUpdate();

// 更新を制限します。(usersテーブルのidを変更できない)
$table->foreignId('user_id')->constrained()->restrictOnUpdate();

// 削除をカスケードします。
$table->foreignId('user_id')->constrained()->cascadeOnDelete();

// 削除を制限します。
$table->foreignId('user_id')->constrained()->restrictOnDelete();

// 削除時に外部キーへNULLをセットします。(usersテーブルのidが削除された場合に、gamesテーブルのuser_idにNULLにする)
$table->foreignId('user_id')->constrained()->nullOnDelete();

// こちらは簡易的な方法です。
$table->foreignId('user_id')->constrained()->onUpdate('cascade');
$table->foreignId('user_id')->constrained()->onDelete('cascade');

// ■外部キーを削除する場合(down)
// 外部キーの名前がわからなくても、外部キーに利用しているidを指定することでも削除できます。
$table->dropForeign(['user_id']);

// 外部キーの名前を入れて削除します。
// 上記の外部キーのid指定で削除出来ない場合は、外部キーの名前を入れて削除する必要があります。
// 理由は現在不明ですが、たまに上記だと失敗する事があるので、おそらくこちらの方法を利用したほうが良いかと思います。
$table->dropForeign('games_user_id_foreign');

外部キーの名前を確認する方法

// こちらのコマンドでターミナル上からmysqlにアクセス出来ます。
sail mysql

// index情報を確認出来ます。
show index from games;

// create table情報を確認出来ます。
SHOW CREATE TABLE games;