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行目の更新版で考え方は削除の時と同じです。