Laravelでマイグレーションファイルについてのあれこれのメモ

Laravelでマイグレーションファイルについてのあれこれのメモ

7 回閲覧されました

みなさんこんにちは、jonioです。

今回はマイグレーションファイルについて知ったことのメモになります。

tableAテーブルを作成する時のマイグレーションファイルに記述します。

Laravelの無料学習サイトを作りました

Laravelを勉強したい人向けの無料の学習サイトを作りました。

ここからリンクに飛べますのでぜひ利用してください。

複合主キーの設定

下記の記述があったとします。

public function up()
{
    Schema::create('values', function (Blueprint $table) {
        $table->string('columnA'); 
        $table->string('columnB');
        $table->string('columnC');
        $table->timestamps();
    });
    
    $table->primary(['columnA', 'columnB']);
}

10行目ですがこれは複合主キーの設定をしています。

主キーはデフォルトではidカラムになっていますがidカラムを作成せずに10行目の記述により複数のカラムを使って主キーの設定ができます。

複合インデックスの設定

下記の記述があったとします。

public function up()
{
    Schema::create('values', function (Blueprint $table) {
        $table->string('columnA'); 
        $table->string('columnB');
        $table->string('columnC');
        $table->timestamps();
    });
    
    $table->primary(['columnA', 'columnB']);
    
    $table->index(['columnA', 'columnB'], 'pk_tableA');    //この行を追加
}

12行目ですがこれは複合インデックスの設定をしています。

「pk_tableA」はインデックス名を指定しているだけでなくても大丈夫です。

これはデータベース検索の高速化の為にあります。

例えば下記のSQL文章があったとします。

SELECT * FROM tableA
WHERE columnA = 'A001' AND columnB = 'ITEM01';

これを頻繁に使わないといけない場合はデータベース検索を高速化しているのでサーバーにかかる負荷を抑えることができます。

外部キー制約の設定

下記の記述があったとします。

public function up()
{
    Schema::create('values', function (Blueprint $table) {
        $table->string('columnA'); 
        $table->string('columnB');
        $table->string('columnC');
        $table->timestamps();
    });
    
    $table->primary(['columnA', 'columnB']);
    
    $table->index(['columnA', 'columnB'], 'pk_tableA');
    
    
    //ここから追加
    $table->foreign(['columnA', 'columnB'], 'fk_key')
          ->references(['parent_columnA', 'parent_columnB'])
          ->on('parent_table')
          ->onDelete('restrict')
          ->onUpdate('restrict');
    //ここまで追加
    
    
}

16行目でtableAの外部キーの設定をしています。

外部キーは紐付け先(参照先と言います)のテーブルに対してtableA(参照元と言います)のどのカラムで紐づけるかということです。

今回はcolumnAとcolumnBに指定しました。

「fk_key」は外部キーの名称です、なくてもいいです。

17行目は外部キーに対して紐付け先のテーブルのどのカラムが対応するかです。

tableAのcolumnAに対してparent_tableのparent_columnAが対応するという意味です。

18行目は参照先のテーブルです。

19行目は参照元(tableA)のデータが参照先(parent_table)にある時に参照先のデータを消すことはできないということです。

だから参照元のデータを削除してから参照先のデータを消さないといけません。

20行目は19行目の更新版で考え方は削除の時と同じです。