Laravel – モデル – 外部キー

外部キーの準備

通常、外部キーは相手方テーブルで自動連番として生成されたキーを対象とすることが多い。

例えば参照先のテーブルのプライマリーキーが'id'であるとして、これがAuto Incrementの場合にはマイグレーションファイルでは以下のように定義される。

$table->bigIncrements('id');

これにより生成されるカラムのデータ型はunsignedBigIntegerとなるので、参照元のテーブルで外部キーを設定するときは以下のように定義する。

$table->unsignedBigInteger('参照先テーブル名の単数形_id');

例えば参照先テーブルをcustomersとすると、マイグレーションファイルでは以下のように書かれる。

ordersテーブルから上記のcustomersテーブルを参照する場合、ordersテーブルの外部キーは以下のように記述する。

外部キーの設定

Laravelのモデルに外部キーを設定する場合、マイグレーションファイルでforeign()メソッドを使う。

具体的には、テーブルを作成するクラスのup()メソッドで呼ばれるSchema::create()メソッド内に以下を記述。

$table->foreign('外部キー')->references('参照キー')->on('参照テーブル');

外部キー制約

マイグレーションファイルで外部キーを設定した場合、デフォルトの外部キー制約RESTRICTになる。この制約をCASCADESET NULLに変更することができる。

削除、更新に対する制約はonDelete()onUpdate()をメソッドチェーンに追加して設定する。

引数は大文字でも小文字でもよく、CASCADESET NULLRESTRICTの何れかを指定する。

コード例

たとえば.投稿記事のPostモデルのテーブルがuser_idカラムを持ち、ここにUsersモデルのidを外部キーとする場合、PostのマイグレーションファイルのCreatePostsTableクラスのup()メソッドに、外部キー設定の行を記述する。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です